Bug 1188401 - Expose `require` out of Loader.jsm and use it. r=jryans
authorAlexandre Poirot <poirot.alex@gmail.com>
Thu, 06 Aug 2015 05:38:10 -0700
changeset 288253 d3c48d49c692c4337b20eedfdb60513a8990bac4
parent 288252 a0d4ce93ef075c5b1a7441728bf434578bc396af
child 288254 3d40d82d9e5a6161c68cebcc46844c9d0a7938cd
push id5067
push userraliiev@mozilla.com
push dateMon, 21 Sep 2015 14:04:52 +0000
treeherdermozilla-beta@14221ffe5b2f [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersjryans
bugs1188401
milestone42.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1188401 - Expose `require` out of Loader.jsm and use it. r=jryans
browser/devtools/animationinspector/animation-controller.js
browser/devtools/animationinspector/test/head.js
browser/devtools/animationinspector/test/unit/test_findOptimalTimeInterval.js
browser/devtools/animationinspector/test/unit/test_timeScale.js
browser/devtools/app-manager/content/connection-footer.js
browser/devtools/app-manager/content/device.js
browser/devtools/app-manager/content/index.js
browser/devtools/app-manager/content/projects.js
browser/devtools/app-manager/content/utils.js
browser/devtools/app-manager/test/head.js
browser/devtools/app-manager/test/test_app_validator.html
browser/devtools/app-manager/test/test_connection_store.html
browser/devtools/app-manager/test/test_device_store.html
browser/devtools/app-manager/test/test_projects_store.html
browser/devtools/app-manager/test/test_remain_connected.html
browser/devtools/app-manager/test/test_template.html
browser/devtools/canvasdebugger/canvasdebugger.js
browser/devtools/canvasdebugger/test/head.js
browser/devtools/commandline/test/head.js
browser/devtools/commandline/test/helpers.js
browser/devtools/debugger/debugger-controller.js
browser/devtools/debugger/test/browser_dbg_hide-toolbar-buttons.js
browser/devtools/debugger/test/browser_dbg_listtabs-02.js
browser/devtools/debugger/test/browser_dbg_on-pause-raise.js
browser/devtools/debugger/test/browser_dbg_promises-allocation-stack.js
browser/devtools/debugger/test/browser_dbg_promises-chrome-allocation-stack.js
browser/devtools/debugger/test/code_ugly-4.js
browser/devtools/debugger/test/head.js
browser/devtools/devtools-clhandler.js
browser/devtools/eyedropper/test/head.js
browser/devtools/fontinspector/test/browser_fontinspector_theme-change.js
browser/devtools/framework/ToolboxProcess.jsm
browser/devtools/framework/connect/connect.js
browser/devtools/framework/gDevTools.jsm
browser/devtools/framework/test/browser_keybindings_02.js
browser/devtools/framework/test/browser_keybindings_03.js
browser/devtools/framework/test/browser_target_remote.js
browser/devtools/framework/test/browser_target_support.js
browser/devtools/framework/test/browser_toolbox_custom_host.js
browser/devtools/framework/test/browser_toolbox_highlight.js
browser/devtools/framework/test/browser_toolbox_hosts.js
browser/devtools/framework/test/browser_toolbox_hosts_size.js
browser/devtools/framework/test/browser_toolbox_minimize.js
browser/devtools/framework/test/browser_toolbox_raise.js
browser/devtools/framework/test/browser_toolbox_sidebar.js
browser/devtools/framework/test/browser_toolbox_sidebar_events.js
browser/devtools/framework/test/browser_toolbox_sidebar_existing_tabs.js
browser/devtools/framework/test/browser_toolbox_sidebar_overflow_menu.js
browser/devtools/framework/test/browser_toolbox_tabsswitch_shortcuts.js
browser/devtools/framework/test/browser_toolbox_toggle.js
browser/devtools/framework/test/browser_toolbox_transport_events.js
browser/devtools/framework/test/browser_toolbox_window_reload_target.js
browser/devtools/framework/test/browser_toolbox_window_shortcuts.js
browser/devtools/framework/test/browser_toolbox_window_title_changes.js
browser/devtools/framework/test/browser_two_tabs.js
browser/devtools/framework/test/head.js
browser/devtools/framework/test/shared-head.js
browser/devtools/framework/toolbox-process-window.js
browser/devtools/inspector/test/head.js
browser/devtools/layoutview/test/head.js
browser/devtools/layoutview/view.js
browser/devtools/markupview/test/actor_events_form.js
browser/devtools/markupview/test/browser_markupview_events_form.js
browser/devtools/markupview/test/head.js
browser/devtools/netmonitor/har/har-automation.js
browser/devtools/netmonitor/har/har-builder.js
browser/devtools/netmonitor/har/toolbox-overlay.js
browser/devtools/netmonitor/netmonitor-controller.js
browser/devtools/netmonitor/netmonitor-view.js
browser/devtools/netmonitor/test/head.js
browser/devtools/performance/performance-controller.js
browser/devtools/performance/test/browser_perf-allocations-to-samples.js
browser/devtools/performance/test/browser_perf-console-record-01.js
browser/devtools/performance/test/browser_perf-console-record-02.js
browser/devtools/performance/test/browser_perf-console-record-03.js
browser/devtools/performance/test/browser_perf-events-calltree.js
browser/devtools/performance/test/browser_perf-highlighted.js
browser/devtools/performance/test/browser_perf-jit-view-01.js
browser/devtools/performance/test/browser_perf-jit-view-02.js
browser/devtools/performance/test/browser_perf-theme-toggle-01.js
browser/devtools/performance/test/browser_perf_recordings-io-04.js
browser/devtools/performance/test/browser_perf_recordings-io-06.js
browser/devtools/performance/test/browser_profiler_tree-view-01.js
browser/devtools/performance/test/browser_profiler_tree-view-02.js
browser/devtools/performance/test/browser_profiler_tree-view-03.js
browser/devtools/performance/test/browser_profiler_tree-view-04.js
browser/devtools/performance/test/browser_profiler_tree-view-05.js
browser/devtools/performance/test/browser_profiler_tree-view-06.js
browser/devtools/performance/test/browser_profiler_tree-view-07.js
browser/devtools/performance/test/browser_profiler_tree-view-08.js
browser/devtools/performance/test/browser_profiler_tree-view-09.js
browser/devtools/performance/test/browser_profiler_tree-view-10.js
browser/devtools/performance/test/browser_profiler_tree-view-11.js
browser/devtools/performance/test/browser_timeline-filters-01.js
browser/devtools/performance/test/browser_timeline-waterfall-background.js
browser/devtools/performance/test/browser_timeline-waterfall-generic.js
browser/devtools/performance/test/browser_timeline-waterfall-sidebar.js
browser/devtools/performance/test/head.js
browser/devtools/performance/test/unit/head.js
browser/devtools/performance/test/unit/test_frame-utils-01.js
browser/devtools/performance/test/unit/test_frame-utils-02.js
browser/devtools/performance/test/unit/test_jit-graph-data.js
browser/devtools/performance/test/unit/test_jit-model-01.js
browser/devtools/performance/test/unit/test_jit-model-02.js
browser/devtools/performance/test/unit/test_marker-blueprint.js
browser/devtools/performance/test/unit/test_marker-utils.js
browser/devtools/performance/test/unit/test_profiler-categories.js
browser/devtools/performance/test/unit/test_tree-model-01.js
browser/devtools/performance/test/unit/test_tree-model-02.js
browser/devtools/performance/test/unit/test_tree-model-03.js
browser/devtools/performance/test/unit/test_tree-model-04.js
browser/devtools/performance/test/unit/test_tree-model-05.js
browser/devtools/performance/test/unit/test_tree-model-06.js
browser/devtools/performance/test/unit/test_tree-model-07.js
browser/devtools/performance/test/unit/test_tree-model-08.js
browser/devtools/performance/test/unit/test_tree-model-09.js
browser/devtools/performance/test/unit/test_tree-model-10.js
browser/devtools/performance/test/unit/test_tree-model-11.js
browser/devtools/performance/test/unit/test_tree-model-12.js
browser/devtools/performance/test/unit/test_tree-model-13.js
browser/devtools/performance/test/unit/test_waterfall-utils-collapse-01.js
browser/devtools/performance/test/unit/test_waterfall-utils-collapse-02.js
browser/devtools/performance/test/unit/test_waterfall-utils-collapse-03.js
browser/devtools/performance/test/unit/test_waterfall-utils-collapse-04.js
browser/devtools/projecteditor/chrome/content/projecteditor-loader.js
browser/devtools/projecteditor/test/head.js
browser/devtools/responsivedesign/responsivedesign.jsm
browser/devtools/responsivedesign/test/head.js
browser/devtools/scratchpad/scratchpad.js
browser/devtools/scratchpad/test/browser_scratchpad_close_toolbox.js
browser/devtools/scratchpad/test/browser_scratchpad_inspect_primitives.js
browser/devtools/scratchpad/test/browser_scratchpad_wrong_window_focus.js
browser/devtools/scratchpad/test/head.js
browser/devtools/shadereditor/shadereditor.js
browser/devtools/shadereditor/test/head.js
browser/devtools/shared/DeveloperToolbar.jsm
browser/devtools/shared/Jsbeautify.jsm
browser/devtools/shared/Parser.jsm
browser/devtools/shared/test/browser_css_color.js
browser/devtools/shared/test/browser_cubic-bezier-01.js
browser/devtools/shared/test/browser_cubic-bezier-02.js
browser/devtools/shared/test/browser_cubic-bezier-03.js
browser/devtools/shared/test/browser_cubic-bezier-04.js
browser/devtools/shared/test/browser_cubic-bezier-05.js
browser/devtools/shared/test/browser_cubic-bezier-06.js
browser/devtools/shared/test/browser_devices.js
browser/devtools/shared/test/browser_flame-graph-01.js
browser/devtools/shared/test/browser_flame-graph-02.js
browser/devtools/shared/test/browser_flame-graph-03a.js
browser/devtools/shared/test/browser_flame-graph-03b.js
browser/devtools/shared/test/browser_flame-graph-03c.js
browser/devtools/shared/test/browser_flame-graph-04.js
browser/devtools/shared/test/browser_flame-graph-utils-01.js
browser/devtools/shared/test/browser_flame-graph-utils-02.js
browser/devtools/shared/test/browser_flame-graph-utils-03.js
browser/devtools/shared/test/browser_flame-graph-utils-04.js
browser/devtools/shared/test/browser_flame-graph-utils-05.js
browser/devtools/shared/test/browser_flame-graph-utils-06.js
browser/devtools/shared/test/browser_flame-graph-utils-hash.js
browser/devtools/shared/test/browser_graphs-01.js
browser/devtools/shared/test/browser_graphs-02.js
browser/devtools/shared/test/browser_graphs-03.js
browser/devtools/shared/test/browser_graphs-04.js
browser/devtools/shared/test/browser_graphs-05.js
browser/devtools/shared/test/browser_graphs-06.js
browser/devtools/shared/test/browser_graphs-07a.js
browser/devtools/shared/test/browser_graphs-07b.js
browser/devtools/shared/test/browser_graphs-07c.js
browser/devtools/shared/test/browser_graphs-07d.js
browser/devtools/shared/test/browser_graphs-07e.js
browser/devtools/shared/test/browser_graphs-08.js
browser/devtools/shared/test/browser_graphs-09a.js
browser/devtools/shared/test/browser_graphs-09b.js
browser/devtools/shared/test/browser_graphs-09c.js
browser/devtools/shared/test/browser_graphs-09d.js
browser/devtools/shared/test/browser_graphs-09e.js
browser/devtools/shared/test/browser_graphs-09f.js
browser/devtools/shared/test/browser_graphs-10a.js
browser/devtools/shared/test/browser_graphs-10b.js
browser/devtools/shared/test/browser_graphs-10c.js
browser/devtools/shared/test/browser_graphs-11a.js
browser/devtools/shared/test/browser_graphs-11b.js
browser/devtools/shared/test/browser_graphs-12.js
browser/devtools/shared/test/browser_graphs-13.js
browser/devtools/shared/test/browser_graphs-14.js
browser/devtools/shared/test/browser_graphs-15.js
browser/devtools/shared/test/browser_graphs-16.js
browser/devtools/shared/test/browser_inplace-editor-01.js
browser/devtools/shared/test/browser_inplace-editor-02.js
browser/devtools/shared/test/browser_mdn-docs-01.js
browser/devtools/shared/test/browser_mdn-docs-02.js
browser/devtools/shared/test/browser_mdn-docs-03.js
browser/devtools/shared/test/browser_observableobject.js
browser/devtools/shared/test/browser_options-view-01.js
browser/devtools/shared/test/browser_outputparser.js
browser/devtools/shared/test/browser_poller.js
browser/devtools/shared/test/browser_spectrum.js
browser/devtools/shared/test/browser_tableWidget_basic.js
browser/devtools/shared/test/browser_tableWidget_keyboard_interaction.js
browser/devtools/shared/test/browser_tableWidget_mouse_interaction.js
browser/devtools/shared/test/browser_theme.js
browser/devtools/shared/test/browser_treeWidget_basic.js
browser/devtools/shared/test/browser_treeWidget_keyboard_interaction.js
browser/devtools/shared/test/browser_treeWidget_mouse_interaction.js
browser/devtools/shared/test/head.js
browser/devtools/shared/test/unit/test_VariablesView_getString_promise.js
browser/devtools/shared/test/unit/test_advanceValidate.js
browser/devtools/shared/test/unit/test_attribute-parsing-01.js
browser/devtools/shared/test/unit/test_attribute-parsing-02.js
browser/devtools/shared/test/unit/test_bezierCanvas.js
browser/devtools/shared/test/unit/test_cubicBezier.js
browser/devtools/shared/theme-switching.js
browser/devtools/shared/widgets/Tooltip.js
browser/devtools/shared/widgets/VariablesView.jsm
browser/devtools/shared/widgets/VariablesViewController.jsm
browser/devtools/shared/widgets/ViewHelpers.jsm
browser/devtools/sourceeditor/test/browser_css_autocompletion.js
browser/devtools/sourceeditor/test/browser_editor_autocomplete_events.js
browser/devtools/sourceeditor/test/head.js
browser/devtools/storage/test/head.js
browser/devtools/styleeditor/StyleEditorUI.jsm
browser/devtools/styleeditor/StyleEditorUtil.jsm
browser/devtools/styleeditor/StyleSheetEditor.jsm
browser/devtools/styleeditor/test/browser_styleeditor_sourcemap_watching.js
browser/devtools/styleeditor/test/browser_styleeditor_sv_resize.js
browser/devtools/styleeditor/test/head.js
browser/devtools/styleinspector/computedview.xhtml
browser/devtools/styleinspector/cssruleview.xhtml
browser/devtools/styleinspector/test/browser_computedview_getNodeInfo.js
browser/devtools/styleinspector/test/browser_computedview_matched-selectors_01.js
browser/devtools/styleinspector/test/browser_computedview_media-queries.js
browser/devtools/styleinspector/test/browser_ruleview_context-menu-show-mdn-docs-01.js
browser/devtools/styleinspector/test/browser_ruleview_context-menu-show-mdn-docs-02.js
browser/devtools/styleinspector/test/browser_ruleview_context-menu-show-mdn-docs-03.js
browser/devtools/styleinspector/test/browser_ruleview_inherit.js
browser/devtools/styleinspector/test/browser_ruleview_user-agent-styles.js
browser/devtools/styleinspector/test/browser_styleinspector_output-parser.js
browser/devtools/styleinspector/test/doc_frame_script.js
browser/devtools/styleinspector/test/head.js
browser/devtools/styleinspector/test/unit/test_parseDeclarations.js
browser/devtools/styleinspector/test/unit/test_parsePseudoClassesAndAttributes.js
browser/devtools/styleinspector/test/unit/test_parseSingleValue.js
browser/devtools/tilt/test/browser_tilt_picking_inspector.js
browser/devtools/tilt/test/head.js
browser/devtools/webaudioeditor/includes.js
browser/devtools/webaudioeditor/test/browser_wa_graph-markers.js
browser/devtools/webaudioeditor/test/head.js
browser/devtools/webconsole/hudservice.js
browser/devtools/webconsole/panel.js
browser/devtools/webconsole/test/browser_console_open_or_focus.js
browser/devtools/webconsole/test/browser_webconsole_bug_632347_iterators_generators.js
browser/devtools/webconsole/test/browser_webconsole_property_provider.js
browser/devtools/webconsole/test/browser_webconsole_split.js
browser/devtools/webconsole/test/head.js
browser/devtools/webide/content/addons.js
browser/devtools/webide/content/details.js
browser/devtools/webide/content/devicepreferences.js
browser/devtools/webide/content/devicesettings.js
browser/devtools/webide/content/logs.js
browser/devtools/webide/content/monitor.js
browser/devtools/webide/content/newapp.js
browser/devtools/webide/content/permissionstable.js
browser/devtools/webide/content/project-listing.js
browser/devtools/webide/content/runtime-listing.js
browser/devtools/webide/content/runtimedetails.js
browser/devtools/webide/content/simulator.js
browser/devtools/webide/content/webide.js
browser/devtools/webide/content/wifi-auth.js
browser/devtools/webide/modules/app-manager.js
browser/devtools/webide/modules/tab-store.js
browser/devtools/webide/test/head.js
toolkit/devtools/Loader.jsm
toolkit/devtools/acorn/tests/unit/head_acorn.js
toolkit/devtools/apps/app-actor-front.js
toolkit/devtools/apps/tests/debugger-protocol-helper.js
toolkit/devtools/apps/tests/unit/head_apps.js
toolkit/devtools/client/dbg-client.jsm
toolkit/devtools/css-color.js
toolkit/devtools/discovery/tests/unit/test_discovery.js
toolkit/devtools/event-emitter.js
toolkit/devtools/gcli/commands/calllog.js
toolkit/devtools/gcli/commands/jsb.js
toolkit/devtools/gcli/commands/paintflashing.js
toolkit/devtools/gcli/gcli.jsm
toolkit/devtools/jsbeautify/tests/unit/head_jsbeautify.js
toolkit/devtools/output-parser.js
toolkit/devtools/pretty-fast/tests/unit/head_pretty-fast.js
toolkit/devtools/qrcode/tests/mochitest/test_decode.html
toolkit/devtools/qrcode/tests/unit/test_encode.js
toolkit/devtools/security/tests/unit/head_dbg.js
toolkit/devtools/security/tests/unit/test_oob_cert_auth.js
toolkit/devtools/server/child.js
toolkit/devtools/server/dbg-server.jsm
toolkit/devtools/server/tests/browser/head.js
toolkit/devtools/server/tests/mochitest/director-helpers.js
toolkit/devtools/server/tests/mochitest/inspector-helpers.js
toolkit/devtools/server/tests/mochitest/memory-helpers.js
toolkit/devtools/server/tests/mochitest/test_connection-manager.html
toolkit/devtools/server/tests/mochitest/test_css-logic-inheritance.html
toolkit/devtools/server/tests/mochitest/test_css-logic-media-queries.html
toolkit/devtools/server/tests/mochitest/test_css-logic-specificity.html
toolkit/devtools/server/tests/mochitest/test_css-logic.html
toolkit/devtools/server/tests/mochitest/test_device.html
toolkit/devtools/server/tests/mochitest/test_framerate_01.html
toolkit/devtools/server/tests/mochitest/test_framerate_02.html
toolkit/devtools/server/tests/mochitest/test_framerate_03.html
toolkit/devtools/server/tests/mochitest/test_framerate_04.html
toolkit/devtools/server/tests/mochitest/test_framerate_05.html
toolkit/devtools/server/tests/mochitest/test_inspector-anonymous.html
toolkit/devtools/server/tests/mochitest/test_inspector-changeattrs.html
toolkit/devtools/server/tests/mochitest/test_inspector-changevalue.html
toolkit/devtools/server/tests/mochitest/test_inspector-dead-nodes.html
toolkit/devtools/server/tests/mochitest/test_inspector-hide.html
toolkit/devtools/server/tests/mochitest/test_inspector-insert.html
toolkit/devtools/server/tests/mochitest/test_inspector-mutations-attr.html
toolkit/devtools/server/tests/mochitest/test_inspector-mutations-childlist.html
toolkit/devtools/server/tests/mochitest/test_inspector-mutations-frameload.html
toolkit/devtools/server/tests/mochitest/test_inspector-mutations-value.html
toolkit/devtools/server/tests/mochitest/test_inspector-pseudoclass-lock.html
toolkit/devtools/server/tests/mochitest/test_inspector-release.html
toolkit/devtools/server/tests/mochitest/test_inspector-reload.html
toolkit/devtools/server/tests/mochitest/test_inspector-remove.html
toolkit/devtools/server/tests/mochitest/test_inspector-resolve-url.html
toolkit/devtools/server/tests/mochitest/test_inspector-retain.html
toolkit/devtools/server/tests/mochitest/test_inspector-scroll-into-view.html
toolkit/devtools/server/tests/mochitest/test_inspector-traversal.html
toolkit/devtools/server/tests/mochitest/test_inspector_getImageData.html
toolkit/devtools/server/tests/mochitest/test_inspector_getNodeFromActor.html
toolkit/devtools/server/tests/mochitest/test_preference.html
toolkit/devtools/server/tests/mochitest/test_registerActor.html
toolkit/devtools/server/tests/mochitest/test_settings.html
toolkit/devtools/server/tests/mochitest/test_styles-applied.html
toolkit/devtools/server/tests/mochitest/test_styles-computed.html
toolkit/devtools/server/tests/mochitest/test_styles-layout.html
toolkit/devtools/server/tests/mochitest/test_styles-matched.html
toolkit/devtools/server/tests/mochitest/test_styles-modify.html
toolkit/devtools/server/tests/mochitest/test_styles-svg.html
toolkit/devtools/server/tests/unit/head_dbg.js
toolkit/devtools/server/tests/unit/test_ScriptStore.js
toolkit/devtools/server/tests/unit/test_actor-registry-actor.js
toolkit/devtools/server/tests/unit/test_blackboxing-06.js
toolkit/devtools/server/tests/unit/test_breakpoint-actor-map.js
toolkit/devtools/server/tests/unit/test_eventlooplag_actor.js
toolkit/devtools/server/tests/unit/test_forwardingprefix.js
toolkit/devtools/server/tests/unit/test_layout-reflows-observer.js
toolkit/devtools/server/tests/unit/test_longstringactor.js
toolkit/devtools/server/tests/unit/test_monitor_actor.js
toolkit/devtools/server/tests/unit/test_nodelistactor.js
toolkit/devtools/server/tests/unit/test_profiler_events-01.js
toolkit/devtools/server/tests/unit/test_profiler_events-02.js
toolkit/devtools/server/tests/unit/test_promises_actor_attach.js
toolkit/devtools/server/tests/unit/test_promises_actor_list_promises.js
toolkit/devtools/server/tests/unit/test_promises_actor_onnewpromise.js
toolkit/devtools/server/tests/unit/test_promises_actor_onpromisesettled.js
toolkit/devtools/server/tests/unit/test_promises_client_getdependentpromises.js
toolkit/devtools/server/tests/unit/test_promises_object_creationtimestamp.js
toolkit/devtools/server/tests/unit/test_promises_object_timetosettle-01.js
toolkit/devtools/server/tests/unit/test_promises_object_timetosettle-02.js
toolkit/devtools/server/tests/unit/test_protocol_abort.js
toolkit/devtools/server/tests/unit/test_protocol_async.js
toolkit/devtools/server/tests/unit/test_protocol_children.js
toolkit/devtools/server/tests/unit/test_protocol_formtype.js
toolkit/devtools/server/tests/unit/test_protocol_longstring.js
toolkit/devtools/server/tests/unit/test_protocol_simple.js
toolkit/devtools/server/tests/unit/test_protocol_stack.js
toolkit/devtools/server/tests/unit/test_protocol_unregister.js
toolkit/devtools/server/tests/unit/test_registerClient.js
toolkit/devtools/server/tests/unit/test_register_actor.js
toolkit/devtools/server/tests/unit/test_requestTypes.js
toolkit/devtools/server/tests/unit/test_sourcemaps-01.js
toolkit/devtools/server/tests/unit/test_sourcemaps-02.js
toolkit/devtools/server/tests/unit/test_sourcemaps-03.js
toolkit/devtools/server/tests/unit/test_sourcemaps-06.js
toolkit/devtools/server/tests/unit/test_sourcemaps-07.js
toolkit/devtools/server/tests/unit/test_sourcemaps-10.js
toolkit/devtools/server/tests/unit/test_sourcemaps-11.js
toolkit/devtools/server/tests/unit/test_sourcemaps-12.js
toolkit/devtools/server/tests/unit/test_sourcemaps-13.js
toolkit/devtools/shared/tests/browser/browser_worker-02.js
toolkit/devtools/shared/worker.js
toolkit/devtools/tern/tests/unit/head_tern.js
toolkit/devtools/tests/mochitest/test_devtools_extensions.html
toolkit/devtools/tests/unit/head_devtools.js
toolkit/devtools/tests/unit/test_async-utils.js
toolkit/devtools/tests/unit/test_consoleID.js
toolkit/devtools/tests/unit/test_prettifyCSS.js
toolkit/devtools/tests/unit/test_require.js
toolkit/devtools/tests/unit/test_require_lazy.js
toolkit/devtools/transport/tests/unit/head_dbg.js
toolkit/devtools/transport/tests/unit/test_dbgsocket_connection_drop.js
toolkit/devtools/transport/tests/unit/test_delimited_read.js
toolkit/devtools/transport/tests/unit/test_packet.js
toolkit/devtools/transport/transport.js
toolkit/devtools/webconsole/test/common.js
toolkit/devtools/webconsole/test/test_commands_registration.html
toolkit/devtools/webconsole/test/test_jsterm.html
toolkit/devtools/webconsole/test/unit/test_js_property_provider.js
toolkit/devtools/webconsole/test/unit/test_network_helper.js
toolkit/devtools/webconsole/test/unit/test_security-info-certificate.js
toolkit/devtools/webconsole/test/unit/test_security-info-parser.js
toolkit/devtools/webconsole/test/unit/test_security-info-protocol-version.js
toolkit/devtools/webconsole/test/unit/test_security-info-state.js
toolkit/devtools/webconsole/test/unit/test_security-info-static-hpkp.js
toolkit/devtools/webconsole/test/unit/test_security-info-weakness-reasons.js
toolkit/devtools/webconsole/utils.js
--- a/browser/devtools/animationinspector/animation-controller.js
+++ b/browser/devtools/animationinspector/animation-controller.js
@@ -4,27 +4,25 @@
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 "use strict";
 
 const { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;
 
 Cu.import("resource://gre/modules/Task.jsm");
-Cu.import("resource://gre/modules/devtools/Loader.jsm");
+let { devtools: loader, require } = Cu.import("resource://gre/modules/devtools/Loader.jsm");
 Cu.import("resource://gre/modules/devtools/Console.jsm");
 Cu.import("resource:///modules/devtools/ViewHelpers.jsm");
 
-devtools.lazyRequireGetter(this, "promise");
-devtools.lazyRequireGetter(this, "EventEmitter",
-                                 "devtools/toolkit/event-emitter");
-devtools.lazyRequireGetter(this, "AnimationsFront",
-                                 "devtools/server/actors/animation", true);
-
-const require = devtools.require;
+loader.lazyRequireGetter(this, "promise");
+loader.lazyRequireGetter(this, "EventEmitter",
+                               "devtools/toolkit/event-emitter");
+loader.lazyRequireGetter(this, "AnimationsFront",
+                               "devtools/server/actors/animation", true);
 
 const STRINGS_URI = "chrome://browser/locale/devtools/animationinspector.properties";
 const L10N = new ViewHelpers.L10N(STRINGS_URI);
 
 // Global toolbox/inspector, set when startup is called.
 let gToolbox, gInspector;
 
 /**
--- a/browser/devtools/animationinspector/test/head.js
+++ b/browser/devtools/animationinspector/test/head.js
@@ -1,23 +1,22 @@
 /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
 /* Any copyright is dedicated to the Public Domain.
  http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 const Cu = Components.utils;
 const {gDevTools} = Cu.import("resource:///modules/devtools/gDevTools.jsm", {});
-const {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
-const {require} = devtools;
+const {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 const {Promise: promise} = Cu.import("resource://gre/modules/Promise.jsm", {});
-const TargetFactory = devtools.TargetFactory;
+const {TargetFactory} = require("devtools/framework/target");
 const {console} = Cu.import("resource://gre/modules/devtools/Console.jsm", {});
 const {ViewHelpers} = Cu.import("resource:///modules/devtools/ViewHelpers.jsm", {});
-const DevToolsUtils = devtools.require("devtools/toolkit/DevToolsUtils");
+const DevToolsUtils = require("devtools/toolkit/DevToolsUtils");
 
 // All tests are asynchronous
 waitForExplicitFinish();
 
 const TEST_URL_ROOT = "http://example.com/browser/browser/devtools/animationinspector/test/";
 const ROOT_TEST_DIR = getRootDirectory(gTestPath);
 const FRAME_SCRIPT_URL = ROOT_TEST_DIR + "doc_frame_script.js";
 const COMMON_FRAME_SCRIPT_URL = "chrome://browser/content/devtools/frame-script-utils.js";
--- a/browser/devtools/animationinspector/test/unit/test_findOptimalTimeInterval.js
+++ b/browser/devtools/animationinspector/test/unit/test_findOptimalTimeInterval.js
@@ -2,19 +2,17 @@
 /* vim: set ts=2 et sw=2 tw=80: */
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 /* eslint no-eval:0 */
 
 "use strict";
 
 const Cu = Components.utils;
-const {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
-const {require} = devtools;
-
+const {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 const {findOptimalTimeInterval} = require("devtools/animationinspector/utils");
 
 // This test array contains objects that are used to test the
 // findOptimalTimeInterval function. Each object should have the following
 // properties:
 // - desc: an optional string that will be printed out
 // - timeScale: a number that represents how many pixels is 1ms
 // - minSpacing: an optional number that represents the minim space between 2
--- a/browser/devtools/animationinspector/test/unit/test_timeScale.js
+++ b/browser/devtools/animationinspector/test/unit/test_timeScale.js
@@ -1,19 +1,17 @@
 /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
 /* vim: set ts=2 et sw=2 tw=80: */
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 const Cu = Components.utils;
-const {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
-const {require} = devtools;
-
+const {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 const {TimeScale} = require("devtools/animationinspector/components");
 
 const TEST_ANIMATIONS = [{
   startTime: 500,
   delay: 0,
   duration: 1000,
   iterationCount: 1
 }, {
--- a/browser/devtools/app-manager/content/connection-footer.js
+++ b/browser/devtools/app-manager/content/connection-footer.js
@@ -4,18 +4,17 @@
 
 const Cu = Components.utils;
 const Ci = Components.interfaces;
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource:///modules/devtools/gDevTools.jsm");
 
 const {Simulator} = Cu.import("resource://gre/modules/devtools/Simulator.jsm")
 const {Devices} = Cu.import("resource://gre/modules/devtools/Devices.jsm");
-const {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
-const {require} = devtools;
+const {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 
 const {ConnectionManager, Connection} = require("devtools/client/connection-manager");
 const {getDeviceFront} = require("devtools/server/actors/device");
 const ConnectionStore = require("devtools/app-manager/connection-store");
 const DeviceStore = require("devtools/app-manager/device-store");
 const simulatorsStore = require("devtools/app-manager/simulators-store");
 const adbStore = require("devtools/app-manager/builtin-adb-store");
 
--- a/browser/devtools/app-manager/content/device.js
+++ b/browser/devtools/app-manager/content/device.js
@@ -2,18 +2,18 @@
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 const Cu = Components.utils;
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/devtools/dbg-client.jsm");
 const {gDevTools} = Cu.import("resource:///modules/devtools/gDevTools.jsm", {});
 
-const {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
-const {require} = devtools;
+const {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
+const {TargetFactory} = require("devtools/framework/target");
 
 const {ConnectionManager, Connection}
   = require("devtools/client/connection-manager");
 const {getDeviceFront} = require("devtools/server/actors/device");
 const {getTargetForApp, launchApp, closeApp}
   = require("devtools/app-actor-front");
 const DeviceStore = require("devtools/app-manager/device-store");
 const WebappsStore = require("devtools/app-manager/webapps-store");
@@ -162,17 +162,17 @@ let UI = {
       return;
     }
 
     let options = {
       form: this.listTabsResponse,
       client: this.connection.client,
       chrome: true
     };
-    devtools.TargetFactory.forRemoteTab(options).then((target) => {
+    TargetFactory.forRemoteTab(options).then((target) => {
       top.UI.openAndShowToolboxForTarget(target, "Main process", null);
     });
   },
 
   openToolboxForApp: function(manifest) {
     if (!this.connected) {
       return;
     }
@@ -188,17 +188,17 @@ let UI = {
 
   _getTargetForTab: function (form) {
       let options = {
         form: form,
         client: this.connection.client,
         chrome: false
       };
       let deferred = promise.defer();
-      return devtools.TargetFactory.forRemoteTab(options);
+      return TargetFactory.forRemoteTab(options);
   },
 
   openToolboxForTab: function (aNode) {
     let index = Array.prototype.indexOf.apply(
       aNode.parentNode.parentNode.parentNode.children,
       [aNode.parentNode.parentNode]);
     this.connection.client.listTabs(
       response => {
--- a/browser/devtools/app-manager/content/index.js
+++ b/browser/devtools/app-manager/content/index.js
@@ -1,16 +1,16 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 const {utils: Cu, interfaces: Ci} = Components;
 Cu.import("resource:///modules/devtools/gDevTools.jsm");
-const {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
-const {require} = devtools;
+const {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
+const {Toolbox} = require("devtools/framework/toolbox");
 const {ConnectionManager, Connection} = require("devtools/client/connection-manager");
 const promise = require("devtools/toolkit/deprecated-sync-thenables");
 const prefs = require("sdk/preferences/service");
 const Services = require("Services");
 const Strings = Services.strings.createBundle("chrome://browser/locale/devtools/app-manager.properties");
 
 let UI = {
   _toolboxTabCursor: 0,
@@ -159,17 +159,17 @@ let UI = {
       this.selectTab(lastTab);
     }
 
     buttonToDestroy.remove();
     panelToDestroy.remove();
   },
 
   openAndShowToolboxForTarget: function(target, name, icon) {
-    let host = devtools.Toolbox.HostType.CUSTOM;
+    let host = Toolbox.HostType.CUSTOM;
     let toolbox = gDevTools.getToolbox(target);
     if (!toolbox) {
       let uid = "uid" + this._toolboxTabCursor++;
       let iframe = this.createToolboxTab(name, icon, uid);
       let options = { customIframe: iframe , uid: uid };
       this._handledTargets.set(target, null);
       return gDevTools.showToolbox(target, null, host, options).then(toolbox => {
         this._handledTargets.set(target, toolbox);
--- a/browser/devtools/app-manager/content/projects.js
+++ b/browser/devtools/app-manager/content/projects.js
@@ -2,18 +2,17 @@
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 const Cc = Components.classes;
 const Ci = Components.interfaces;
 const Cu = Components.utils;
 const Cr = Components.results;
 Cu.import("resource:///modules/devtools/gDevTools.jsm");
-const {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
-const {require} = devtools;
+const {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 const {ConnectionManager, Connection} = require("devtools/client/connection-manager");
 const {AppProjects} = require("devtools/app-manager/app-projects");
 const {AppValidator} = require("devtools/app-manager/app-validator");
 const {Services} = Cu.import("resource://gre/modules/Services.jsm");
 const {FileUtils} = Cu.import("resource://gre/modules/FileUtils.jsm");
 const {installHosted, installPackaged, getTargetForApp,
        reloadApp, launchApp, closeApp} = require("devtools/app-actor-front");
 const {EventEmitter} = Cu.import("resource://gre/modules/devtools/event-emitter.js");
--- a/browser/devtools/app-manager/content/utils.js
+++ b/browser/devtools/app-manager/content/utils.js
@@ -9,18 +9,17 @@
  *  . mergeStores: merge several store into one.
  *  . l10n: resolves strings from app-manager.properties.
  *
  */
 
 let Utils = (function() {
   const Cu = Components.utils;
   const {Services} = Cu.import("resource://gre/modules/Services.jsm", {});
-  const {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
-  const {require} = devtools;
+  const {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
   const EventEmitter = require("devtools/toolkit/event-emitter");
 
 
   function _createSetEventForwarder(key, finalStore) {
     return function(event, path, value) {
       finalStore.emit("set", [key].concat(path), value);
     };
   }
--- a/browser/devtools/app-manager/test/head.js
+++ b/browser/devtools/app-manager/test/head.js
@@ -1,19 +1,18 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 "use strict";
 
 const {utils: Cu, classes: Cc, interfaces: Ci} = Components;
 
 const {Promise: promise} =
   Cu.import("resource://gre/modules/devtools/deprecated-sync-thenables.js", {});
-const {devtools} =
+const {require} =
   Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
-const {require} = devtools;
 
 const {AppProjects} = require("devtools/app-manager/app-projects");
 const DevToolsUtils = require("devtools/toolkit/DevToolsUtils");
 
 const APP_MANAGER_URL = "about:app-manager";
 const TEST_BASE =
   "chrome://mochitests/content/browser/browser/devtools/app-manager/test/";
 const HOSTED_APP_MANIFEST = TEST_BASE + "hosted_app.manifest";
--- a/browser/devtools/app-manager/test/test_app_validator.html
+++ b/browser/devtools/app-manager/test/test_app_validator.html
@@ -13,18 +13,17 @@
 
   <body>
 
     <script type="application/javascript;version=1.8">
     const Cu = Components.utils;
     const Cc = Components.classes;
     const Ci = Components.interfaces;
     Cu.import("resource://testing-common/httpd.js");
-    const {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
-    const {require} = devtools;
+    const {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 
     const {AppValidator} = require("devtools/app-manager/app-validator");
     const {Services} = Cu.import("resource://gre/modules/Services.jsm");
     const nsFile = Components.Constructor("@mozilla.org/file/local;1",
                                            "nsILocalFile", "initWithPath");
     const cr = Cc["@mozilla.org/chrome/chrome-registry;1"]
                  .getService(Ci.nsIChromeRegistry);
     const strings = Services.strings.createBundle("chrome://browser/locale/devtools/app-manager.properties");
--- a/browser/devtools/app-manager/test/test_connection_store.html
+++ b/browser/devtools/app-manager/test/test_connection_store.html
@@ -33,18 +33,17 @@ Bug 901519 - [app manager] data store fo
       }
 
       window.onload = function() {
         SimpleTest.waitForExplicitFinish();
 
         Cu.import("resource://gre/modules/Services.jsm");
         Cu.import("resource:///modules/devtools/gDevTools.jsm");
 
-        const {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
-        const {require} = devtools;
+        const {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 
         const {ConnectionManager} = require("devtools/client/connection-manager");
         const ConnectionStore = require("devtools/app-manager/connection-store");
 
         let connection = ConnectionManager.createConnection();
         let store = new ConnectionStore(connection);
 
         let root = document.querySelector("#root");
--- a/browser/devtools/app-manager/test/test_device_store.html
+++ b/browser/devtools/app-manager/test/test_device_store.html
@@ -32,23 +32,22 @@ Bug 901520 - [app manager] data store fo
 
       window.onload = function() {
         SimpleTest.waitForExplicitFinish();
 
         Cu.import("resource://gre/modules/Services.jsm");
         Cu.import("resource:///modules/devtools/gDevTools.jsm");
 
 
-        const {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
-        const {require} = devtools;
+        const {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 
         const {ConnectionManager} = require("devtools/client/connection-manager");
         const DeviceStore = require("devtools/app-manager/device-store");
 
-        let {getDeviceFront} = devtools.require("devtools/server/actors/device");
+        let {getDeviceFront} = require("devtools/server/actors/device");
 
         let connection = ConnectionManager.createConnection();
         let store = new DeviceStore(connection);
 
         connection.once("connected", function() {
           store.on("set", function check(event, path, value) {
             if (path.join(".") != "description") return;
             store.off("set", check);
--- a/browser/devtools/app-manager/test/test_projects_store.html
+++ b/browser/devtools/app-manager/test/test_projects_store.html
@@ -17,18 +17,17 @@ Bug 907206 - data store for local apps
   <body>
 
     <script type="application/javascript;version=1.8">
       const Cu = Components.utils;
 
       window.onload = function() {
         SimpleTest.waitForExplicitFinish();
 
-        const {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
-        const {require} = devtools;
+        const { require } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 
         const { AppProjects } = require("devtools/app-manager/app-projects");
 
         function testHosted(projects) {
           let manifestURL = document.location.href.replace("test_projects_store.html", "hosted_app/webapp.manifest");
           AppProjects.addHosted(manifestURL)
             .then(function (app) {
               is(projects.length, 1,
--- a/browser/devtools/app-manager/test/test_remain_connected.html
+++ b/browser/devtools/app-manager/test/test_remain_connected.html
@@ -26,19 +26,20 @@ Bug 912646 - Closing app toolbox causes 
         DebuggerServer.addBrowserActors();
       }
 
       window.onload = function() {
         SimpleTest.waitForExplicitFinish();
 
         Cu.import("resource:///modules/devtools/gDevTools.jsm");
 
-        const {devtools} =
+        const {require} =
           Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
-        const {require} = devtools;
+        const {TargetFactory} = require("devtools/framework/target");
+        const {Toolbox} = require("devtools/framework/toolbox");
 
         const {Connection, ConnectionManager} =
           require("devtools/client/connection-manager");
         const ConnectionStore =
           require("devtools/app-manager/connection-store");
 
         let connection = ConnectionManager.createConnection();
 
@@ -71,18 +72,18 @@ Bug 912646 - Closing app toolbox causes 
 
         function cycleToolbox() {
           connection.client.listTabs(response => {
             let options = {
               form: response.tabs[0],
               client: connection.client,
               chrome: true
             };
-            devtools.TargetFactory.forRemoteTab(options).then(target => {
-              let hostType = devtools.Toolbox.HostType.WINDOW;
+            TargetFactory.forRemoteTab(options).then(target => {
+              let hostType = Toolbox.HostType.WINDOW;
               gDevTools.showToolbox(target,
                                     null,
                                     hostType).then(toolbox => {
                 SimpleTest.executeSoon(() => {
                   toolbox.once("destroyed", onDestroyToolbox);
                   toolbox.destroy();
                 });
               });
--- a/browser/devtools/app-manager/test/test_template.html
+++ b/browser/devtools/app-manager/test/test_template.html
@@ -154,18 +154,17 @@
   </template>
 
   <script type="application/javascript;version=1.8" src="chrome://browser/content/devtools/app-manager/template.js"></script>
   <script type="application/javascript;version=1.8">
     SimpleTest.waitForExplicitFinish();
 
     const Cu = Components.utils;
     Cu.import("resource:///modules/devtools/gDevTools.jsm");
-    const {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
-    const {require} = devtools;
+    const {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
     const ObservableObject = require("devtools/shared/observable-object");
 
     let data = {
       title: "ttt",
       mop: {
         name: "meh",
       },
       foo1: {
--- a/browser/devtools/canvasdebugger/canvasdebugger.js
+++ b/browser/devtools/canvasdebugger/canvasdebugger.js
@@ -6,18 +6,17 @@
 const { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;
 
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 Cu.import("resource:///modules/devtools/SideMenuWidget.jsm");
 Cu.import("resource:///modules/devtools/ViewHelpers.jsm");
 Cu.import("resource://gre/modules/devtools/Console.jsm");
 
-const devtools = Cu.import("resource://gre/modules/devtools/Loader.jsm", {}).devtools;
-const { require } = devtools;
+const { require } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 const promise = Cu.import("resource://gre/modules/Promise.jsm", {}).Promise;
 const EventEmitter = require("devtools/toolkit/event-emitter");
 const { CallWatcherFront } = require("devtools/server/actors/call-watcher");
 const { CanvasFront } = require("devtools/server/actors/canvas");
 const DevToolsUtils = require("devtools/toolkit/DevToolsUtils");
 
 const Telemetry = require("devtools/shared/telemetry");
 const telemetry = new Telemetry();
--- a/browser/devtools/canvasdebugger/test/head.js
+++ b/browser/devtools/canvasdebugger/test/head.js
@@ -10,26 +10,26 @@ let { Services } = Cu.import("resource:/
 // be affected by this pref.
 let gEnableLogging = Services.prefs.getBoolPref("devtools.debugger.log");
 Services.prefs.setBoolPref("devtools.debugger.log", false);
 
 let { generateUUID } = Cc['@mozilla.org/uuid-generator;1'].getService(Ci.nsIUUIDGenerator);
 let { Task } = Cu.import("resource://gre/modules/Task.jsm", {});
 let { Promise: promise } = Cu.import("resource://gre/modules/Promise.jsm", {});
 let { gDevTools } = Cu.import("resource:///modules/devtools/gDevTools.jsm", {});
-let { devtools } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
+let { require } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 let { DebuggerServer } = Cu.import("resource://gre/modules/devtools/dbg-server.jsm", {});
 let { DebuggerClient } = Cu.import("resource://gre/modules/devtools/dbg-client.jsm", {});
-let { CallWatcherFront } = devtools.require("devtools/server/actors/call-watcher");
-let { CanvasFront } = devtools.require("devtools/server/actors/canvas");
-let { setTimeout } = devtools.require("sdk/timers");
-let DevToolsUtils = devtools.require("devtools/toolkit/DevToolsUtils");
-let TiltGL = devtools.require("devtools/tilt/tilt-gl");
-let TargetFactory = devtools.TargetFactory;
-let Toolbox = devtools.Toolbox;
+let { CallWatcherFront } = require("devtools/server/actors/call-watcher");
+let { CanvasFront } = require("devtools/server/actors/canvas");
+let { setTimeout } = require("sdk/timers");
+let DevToolsUtils = require("devtools/toolkit/DevToolsUtils");
+let TiltGL = require("devtools/tilt/tilt-gl");
+let { TargetFactory } = require("devtools/framework/target");
+let { Toolbox } = require("devtools/framework/toolbox");
 let mm = null
 
 const FRAME_SCRIPT_UTILS_URL = "chrome://browser/content/devtools/frame-script-utils.js";
 const EXAMPLE_URL = "http://example.com/browser/browser/devtools/canvasdebugger/test/";
 const SET_TIMEOUT_URL = EXAMPLE_URL + "doc_settimeout.html";
 const NO_CANVAS_URL = EXAMPLE_URL + "doc_no-canvas.html";
 const RAF_NO_CANVAS_URL = EXAMPLE_URL + "doc_raf-no-canvas.html";
 const SIMPLE_CANVAS_URL = EXAMPLE_URL + "doc_simple-canvas.html";
--- a/browser/devtools/commandline/test/head.js
+++ b/browser/devtools/commandline/test/head.js
@@ -1,18 +1,17 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 const TEST_BASE_HTTP = "http://example.com/browser/browser/devtools/commandline/test/";
 const TEST_BASE_HTTPS = "https://example.com/browser/browser/devtools/commandline/test/";
 
-let { require } =
-  Cu.import("resource://gre/modules/devtools/Loader.jsm", {}).devtools;
-let console = require("resource://gre/modules/devtools/Console.jsm").console;
+let { require } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
+let { console } = require("resource://gre/modules/devtools/Console.jsm");
 let DevToolsUtils = require("devtools/toolkit/DevToolsUtils");
 
 // Import the GCLI test helper
 let testDir = gTestPath.substr(0, gTestPath.lastIndexOf("/"));
 Services.scriptloader.loadSubScript(testDir + "/helpers.js", this);
 Services.scriptloader.loadSubScript(testDir + "/mockCommands.js", this);
 
 DevToolsUtils.testing = true;
--- a/browser/devtools/commandline/test/helpers.js
+++ b/browser/devtools/commandline/test/helpers.js
@@ -17,18 +17,18 @@
 'use strict';
 
 // A copy of this code exists in firefox mochitests. They should be kept
 // in sync. Hence the exports synonym for non AMD contexts.
 var { helpers, assert } = (function() {
 
 var helpers = {};
 
-var TargetFactory = Cu.import("resource://gre/modules/devtools/Loader.jsm", {}).devtools.TargetFactory;
-var require = Cu.import("resource://gre/modules/devtools/Loader.jsm", {}).devtools.require;
+var { require } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
+var { TargetFactory } = require("devtools/framework/target");
 
 var assert = { ok: ok, is: is, log: info };
 var util = require('gcli/util/util');
 var Promise = require('gcli/util/promise').Promise;
 var cli = require('gcli/cli');
 var KeyEvent = require('gcli/util/util').KeyEvent;
 
 const { GcliFront } = require("devtools/server/actors/gcli");
--- a/browser/devtools/debugger/debugger-controller.js
+++ b/browser/devtools/debugger/debugger-controller.js
@@ -97,19 +97,20 @@ Cu.import("resource://gre/modules/Servic
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 Cu.import("resource://gre/modules/devtools/event-emitter.js");
 Cu.import("resource:///modules/devtools/SimpleListWidget.jsm");
 Cu.import("resource:///modules/devtools/BreadcrumbsWidget.jsm");
 Cu.import("resource:///modules/devtools/SideMenuWidget.jsm");
 Cu.import("resource:///modules/devtools/VariablesView.jsm");
 Cu.import("resource:///modules/devtools/VariablesViewController.jsm");
 Cu.import("resource:///modules/devtools/ViewHelpers.jsm");
-const { devtools } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 
-const require = devtools.require;
+const {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
+const {TargetFactory} = require("devtools/framework/target");
+const {Toolbox} = require("devtools/framework/toolbox")
 const DevToolsUtils = require("devtools/toolkit/DevToolsUtils");
 const promise = require("devtools/toolkit/deprecated-sync-thenables");
 const Editor = require("devtools/sourceeditor/editor");
 const DebuggerEditor = require("devtools/sourceeditor/debugger.js");
 const {Tooltip} = require("devtools/shared/widgets/Tooltip");
 const FastListWidget = require("devtools/shared/widgets/FastListWidget");
 
 XPCOMUtils.defineLazyModuleGetter(this, "Task",
@@ -121,17 +122,17 @@ XPCOMUtils.defineLazyModuleGetter(this, 
 XPCOMUtils.defineLazyModuleGetter(this, "ShortcutUtils",
   "resource://gre/modules/ShortcutUtils.jsm");
 
 XPCOMUtils.defineLazyServiceGetter(this, "clipboardHelper",
   "@mozilla.org/widget/clipboardhelper;1", "nsIClipboardHelper");
 
 Object.defineProperty(this, "NetworkHelper", {
   get: function() {
-    return devtools.require("devtools/toolkit/webconsole/network-helper");
+    return require("devtools/toolkit/webconsole/network-helper");
   },
   configurable: true,
   enumerable: true
 });
 
 /**
  * Object defining the debugger controller components.
  */
@@ -486,19 +487,19 @@ Workers.prototype = {
 
   _onWorkerThaw: function (type, packet) {
     let workerClient = this._workerClients.get(packet.from);
     DebuggerView.Workers.addWorker(packet.from, workerClient.url);
   },
 
   _onWorkerSelect: function (workerActor) {
     let workerClient = this._workerClients.get(workerActor);
-    gDevTools.showToolbox(devtools.TargetFactory.forWorker(workerClient),
+    gDevTools.showToolbox(TargetFactory.forWorker(workerClient),
                           "jsdebugger",
-                          devtools.Toolbox.HostType.WINDOW);
+                          Toolbox.HostType.WINDOW);
   }
 };
 
 /**
  * ThreadState keeps the UI up to date with the state of the
  * thread (paused/attached/etc.).
  */
 function ThreadState() {
--- a/browser/devtools/debugger/test/browser_dbg_hide-toolbar-buttons.js
+++ b/browser/devtools/debugger/test/browser_dbg_hide-toolbar-buttons.js
@@ -3,18 +3,17 @@
 
 /**
  * Bug 1093349: Test that the pretty-printing and blackboxing buttons
  * are hidden if the server doesn't support them
  */
 
 const TAB_URL = EXAMPLE_URL + "doc_auto-pretty-print-01.html";
 
-let devtools = Cu.import("resource://gre/modules/devtools/Loader.jsm", {}).devtools;
-let { RootActor } = devtools.require("devtools/server/actors/root");
+let { RootActor } = require("devtools/server/actors/root");
 
 function test() {
   let gTab, gDebuggee, gPanel, gDebugger;
   let gEditor, gSources, gBreakpoints, gBreakpointsAdded, gBreakpointsRemoving;
 
   RootActor.prototype.traits.noBlackBoxing = true;
   RootActor.prototype.traits.noPrettyPrinting = true;
 
--- a/browser/devtools/debugger/test/browser_dbg_listtabs-02.js
+++ b/browser/devtools/debugger/test/browser_dbg_listtabs-02.js
@@ -1,17 +1,16 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 /**
  * Make sure the root actor's live tab list implementation works as specified.
  */
 
-let devtools = Cu.import("resource://gre/modules/devtools/Loader.jsm", {}).devtools;
-let { BrowserTabList } = devtools.require("devtools/server/actors/webbrowser");
+let { BrowserTabList } = require("devtools/server/actors/webbrowser");
 
 let gTestPage = "data:text/html;charset=utf-8," + encodeURIComponent(
   "<title>JS Debugger BrowserTabList test page</title><body>Yo.</body>");
 
 // The tablist object whose behavior we observe.
 let gTabList;
 let gFirstActor, gActorA;
 let gTabA, gTabB, gTabC;
--- a/browser/devtools/debugger/test/browser_dbg_on-pause-raise.js
+++ b/browser/devtools/debugger/test/browser_dbg_on-pause-raise.js
@@ -56,25 +56,25 @@ function onFocus() {
 
 function testPause() {
   is(gDebugger.gThreadClient.paused, false,
     "Should be running after starting the test.");
 
   is(gFocusedWindow, window,
     "Main window is the top level window before pause.");
 
-  if (gToolbox.hostType == devtools.Toolbox.HostType.WINDOW) {
+  if (gToolbox.hostType == Toolbox.HostType.WINDOW) {
     gToolbox._host._window.addEventListener("focus", function onFocus() {
       gToolbox._host._window.removeEventListener("focus", onFocus, true);
       gFocusedWindow = gToolbox._host._window;
     }, true);
   }
 
   gDebugger.gThreadClient.addOneTimeListener("paused", () => {
-    if (gToolbox.hostType == devtools.Toolbox.HostType.WINDOW) {
+    if (gToolbox.hostType == Toolbox.HostType.WINDOW) {
       is(gFocusedWindow, gToolbox._host._window,
          "Toolbox window is the top level window on pause.");
     } else {
       is(gBrowser.selectedTab, gTab,
         "Debugger's tab got selected.");
     }
     gToolbox.selectTool("webconsole").then(() => {
       ok(gToolboxTab.hasAttribute("highlighted") &&
@@ -111,29 +111,29 @@ function testResume() {
   });
 
   EventUtils.sendMouseEvent({ type: "mousedown" },
     gDebugger.document.getElementById("resume"),
     gDebugger);
 }
 
 function maybeEndTest() {
-  if (gToolbox.hostType == devtools.Toolbox.HostType.BOTTOM) {
+  if (gToolbox.hostType == Toolbox.HostType.BOTTOM) {
     info("Switching to a toolbox window host.");
-    gToolbox.switchHost(devtools.Toolbox.HostType.WINDOW).then(focusMainWindow);
+    gToolbox.switchHost(Toolbox.HostType.WINDOW).then(focusMainWindow);
   } else {
     info("Switching to main window host.");
-    gToolbox.switchHost(devtools.Toolbox.HostType.BOTTOM).then(() => closeDebuggerAndFinish(gPanel));
+    gToolbox.switchHost(Toolbox.HostType.BOTTOM).then(() => closeDebuggerAndFinish(gPanel));
   }
 }
 
 registerCleanupFunction(function() {
   // Revert to the default toolbox host, so that the following tests proceed
   // normally and not inside a non-default host.
-  Services.prefs.setCharPref("devtools.toolbox.host", devtools.Toolbox.HostType.BOTTOM);
+  Services.prefs.setCharPref("devtools.toolbox.host", Toolbox.HostType.BOTTOM);
 
   gTab = null;
   gPanel = null;
   gDebugger = null;
 
   gFocusedWindow = null;
   gToolbox = null;
   gToolboxTab = null;
--- a/browser/devtools/debugger/test/browser_dbg_promises-allocation-stack.js
+++ b/browser/devtools/debugger/test/browser_dbg_promises-allocation-stack.js
@@ -3,18 +3,18 @@
 
 /**
  * Test that we can get a stack to a promise's allocation point.
  */
 
 "use strict";
 
 const TAB_URL = EXAMPLE_URL + "doc_promise-get-allocation-stack.html";
-const { PromisesFront } = devtools.require("devtools/server/actors/promises");
-let events = devtools.require("sdk/event/core");
+const { PromisesFront } = require("devtools/server/actors/promises");
+let events = require("sdk/event/core");
 
 function test() {
   Task.spawn(function* () {
     DebuggerServer.init();
     DebuggerServer.addBrowserActors();
 
     const [ tab,, panel ] = yield initDebugger(TAB_URL);
 
--- a/browser/devtools/debugger/test/browser_dbg_promises-chrome-allocation-stack.js
+++ b/browser/devtools/debugger/test/browser_dbg_promises-chrome-allocation-stack.js
@@ -4,18 +4,18 @@
 /**
  * Test that we can get a stack to a promise's allocation point in the chrome
  * process.
  */
 
 "use strict";
 
 const SOURCE_URL = "browser_dbg_promises-chrome-allocation-stack.js";
-const { PromisesFront } = devtools.require("devtools/server/actors/promises");
-let events = devtools.require("sdk/event/core");
+const { PromisesFront } = require("devtools/server/actors/promises");
+let events = require("sdk/event/core");
 
 const STACK_DATA = [
   { functionDisplayName: "test/</<" },
   { functionDisplayName: "testGetAllocationStack" },
 ];
 
 function test() {
   Task.spawn(function* () {
--- a/browser/devtools/debugger/test/code_ugly-4.js
+++ b/browser/devtools/debugger/test/code_ugly-4.js
@@ -1,16 +1,16 @@
 function a(){b()}function b(){debugger}
 //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJjLmpzIiwic291cmNlcyI6WyJkYXRhOnRleHQvamF2YXNjcmlwdCxmdW5jdGlvbiBhKCl7YigpfSIsImRhdGE6dGV4dC9qYXZhc2NyaXB0LGZ1bmN0aW9uIGIoKXtkZWJ1Z2dlcn0iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJDQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMifQ==
 
 // Generate this file by evaluating the following in a browser-environment
 // scratchpad:
 //
-//    let { devtools } = Components.utils.import('resource://gre/modules/devtools/Loader.jsm', {});
-//    let { SourceNode } = devtools.require("source-map");
+//    let { require } = Components.utils.import('resource://gre/modules/devtools/Loader.jsm', {});
+//    let { SourceNode } = require("source-map");
 //
 //    let dataUrl = s => "data:text/javascript," + s;
 //
 //    let A = "function a(){b()}";
 //    let A_URL = dataUrl(A);
 //    let B = "function b(){debugger}";
 //    let B_URL = dataUrl(B);
 //
--- a/browser/devtools/debugger/test/head.js
+++ b/browser/devtools/debugger/test/head.js
@@ -10,28 +10,27 @@ let { Services } = Cu.import("resource:/
 // debug a test in your try runs. Both the debugger server and frontend will
 // be affected by this pref.
 let gEnableLogging = Services.prefs.getBoolPref("devtools.debugger.log");
 Services.prefs.setBoolPref("devtools.debugger.log", false);
 
 let { Task } = Cu.import("resource://gre/modules/Task.jsm", {});
 let { Promise: promise } = Cu.import("resource://gre/modules/devtools/deprecated-sync-thenables.js", {});
 let { gDevTools } = Cu.import("resource:///modules/devtools/gDevTools.jsm", {});
-let { devtools } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
-let { require } = devtools;
+let { require } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 let DevToolsUtils = require("devtools/toolkit/DevToolsUtils");
 let { BrowserToolboxProcess } = Cu.import("resource:///modules/devtools/ToolboxProcess.jsm", {});
 let { DebuggerServer } = Cu.import("resource://gre/modules/devtools/dbg-server.jsm", {});
 let { DebuggerClient, ObjectClient } =
   Cu.import("resource://gre/modules/devtools/dbg-client.jsm", {});
 let { AddonManager } = Cu.import("resource://gre/modules/AddonManager.jsm", {});
 let EventEmitter = require("devtools/toolkit/event-emitter");
 const { promiseInvoke } = require("devtools/async-utils");
-let TargetFactory = devtools.TargetFactory;
-let Toolbox = devtools.Toolbox;
+let { TargetFactory } = require("devtools/framework/target");
+let { Toolbox } = require("devtools/framework/toolbox")
 
 const EXAMPLE_URL = "http://example.com/browser/browser/devtools/debugger/test/";
 const FRAME_SCRIPT_URL = getRootDirectory(gTestPath) + "code_frame-script.js";
 
 DevToolsUtils.testing = true;
 SimpleTest.registerCleanupFunction(() => {
   DevToolsUtils.testing = false;
 });
@@ -596,18 +595,18 @@ AddonDebugger.prototype = {
       chrome: true,
       isTabActor: false
     };
 
     let toolboxOptions = {
       customIframe: this.frame
     };
 
-    this.target = devtools.TargetFactory.forTab(targetOptions);
-    let toolbox = yield gDevTools.showToolbox(this.target, "jsdebugger", devtools.Toolbox.HostType.CUSTOM, toolboxOptions);
+    this.target = TargetFactory.forTab(targetOptions);
+    let toolbox = yield gDevTools.showToolbox(this.target, "jsdebugger", Toolbox.HostType.CUSTOM, toolboxOptions);
 
     info("Addon debugger panel shown successfully.");
 
     this.debuggerPanel = toolbox.getCurrentPanel();
 
     // Wait for the initial resume...
     yield waitForClientEvents(this.debuggerPanel, "resumed");
     yield prepareDebugger(this.debuggerPanel);
--- a/browser/devtools/devtools-clhandler.js
+++ b/browser/devtools/devtools-clhandler.js
@@ -34,21 +34,21 @@ devtoolsCommandlineHandler.prototype = {
     if (debuggerServerFlag) {
       this.handleDebuggerServerFlag(cmdLine, debuggerServerFlag);
     }
   },
 
   handleConsoleFlag: function(cmdLine) {
     let window = Services.wm.getMostRecentWindow("devtools:webconsole");
     if (!window) {
-      let devtools = Cu.import("resource://gre/modules/devtools/Loader.jsm", {}).devtools;
+      let { require } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
       // Load the browser devtools main module as the loader's main module.
       Cu.import("resource:///modules/devtools/gDevTools.jsm");
-      let hudservice = devtools.require("devtools/webconsole/hudservice");
-      let console = Cu.import("resource://gre/modules/devtools/Console.jsm", {}).console;
+      let hudservice = require("devtools/webconsole/hudservice");
+      let { console } = Cu.import("resource://gre/modules/devtools/Console.jsm", {});
       hudservice.toggleBrowserConsole().then(null, console.error);
     } else {
       window.focus(); // the Browser Console was already open
     }
 
     if (cmdLine.state == Ci.nsICommandLine.STATE_REMOTE_AUTO) {
       cmdLine.preventDefault = true;
     }
--- a/browser/devtools/eyedropper/test/head.js
+++ b/browser/devtools/eyedropper/test/head.js
@@ -1,16 +1,16 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // shared-head.js handles imports, constants, and utility functions
 Services.scriptloader.loadSubScript("chrome://mochitests/content/browser/browser/devtools/framework/test/shared-head.js", this);
 Services.scriptloader.loadSubScript(TEST_DIR + "../../../commandline/test/helpers.js", this);
 
-const { Eyedropper, EyedropperManager } = devtools.require("devtools/eyedropper/eyedropper");
+const { Eyedropper, EyedropperManager } = require("devtools/eyedropper/eyedropper");
 
 function waitForClipboard(setup, expected) {
   let deferred = promise.defer();
   SimpleTest.waitForClipboard(expected, setup, deferred.resolve, deferred.reject);
   return deferred.promise;
 }
 
 function dropperStarted(dropper) {
--- a/browser/devtools/fontinspector/test/browser_fontinspector_theme-change.js
+++ b/browser/devtools/fontinspector/test/browser_fontinspector_theme-change.js
@@ -1,16 +1,16 @@
 /* vim: set ts=2 et sw=2 tw=80: */
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 "use strict";
 
 // Test that the preview images are updated when the theme changes.
 
-const { getTheme, setTheme } = devtools.require("devtools/shared/theme");
+const { getTheme, setTheme } = require("devtools/shared/theme");
 
 const TEST_URI = BASE_URI + "browser_fontinspector.html";
 const originalTheme = getTheme();
 
 registerCleanupFunction(() => {
   info(`Restoring theme to '${originalTheme}.`);
   setTheme(originalTheme);
 });
--- a/browser/devtools/framework/ToolboxProcess.jsm
+++ b/browser/devtools/framework/ToolboxProcess.jsm
@@ -7,27 +7,23 @@
 
 const { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;
 
 const DBG_XUL = "chrome://browser/content/devtools/framework/toolbox-process-window.xul";
 const CHROME_DEBUGGER_PROFILE_NAME = "chrome_debugger_profile";
 
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/XPCOMUtils.jsm")
-
-XPCOMUtils.defineLazyModuleGetter(this, "DevToolsLoader",
-  "resource://gre/modules/devtools/Loader.jsm");
-XPCOMUtils.defineLazyModuleGetter(this, "devtools",
-  "resource://gre/modules/devtools/Loader.jsm");
+const { require, DevToolsLoader } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 
 XPCOMUtils.defineLazyGetter(this, "Telemetry", function () {
-  return devtools.require("devtools/shared/telemetry");
+  return require("devtools/shared/telemetry");
 });
 XPCOMUtils.defineLazyGetter(this, "EventEmitter", function () {
-  return devtools.require("devtools/toolkit/event-emitter");
+  return require("devtools/toolkit/event-emitter");
 });
 const { Promise: promise } = Cu.import("resource://gre/modules/Promise.jsm", {});
 
 this.EXPORTED_SYMBOLS = ["BrowserToolboxProcess"];
 
 let processes = new Set();
 
 /**
--- a/browser/devtools/framework/connect/connect.js
+++ b/browser/devtools/framework/connect/connect.js
@@ -7,17 +7,19 @@
 "use strict";
 
 const Cu = Components.utils;
 Cu.import('resource://gre/modules/XPCOMUtils.jsm');
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/Task.jsm");
 Cu.import("resource://gre/modules/devtools/dbg-client.jsm");
 let {gDevTools} = Cu.import("resource:///modules/devtools/gDevTools.jsm", {});
-let {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
+let {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
+let {TargetFactory} = require("devtools/framework/target");
+let {Toolbox} = require("devtools/framework/toolbox")
 let {Promise: promise} = Cu.import("resource://gre/modules/Promise.jsm", {});
 
 let gClient;
 let gConnectionTimeout;
 
 XPCOMUtils.defineLazyGetter(window, 'l10n', function () {
   return Services.strings.createBundle('chrome://browser/locale/devtools/connection-screen.properties');
 });
@@ -231,18 +233,18 @@ function handleConnectionTimeout() {
  */
 function openToolbox(form, chrome=false, tool="webconsole", isTabActor) {
   let options = {
     form: form,
     client: gClient,
     chrome: chrome,
     isTabActor: isTabActor
   };
-  devtools.TargetFactory.forRemoteTab(options).then((target) => {
-    let hostType = devtools.Toolbox.HostType.WINDOW;
+  TargetFactory.forRemoteTab(options).then((target) => {
+    let hostType = Toolbox.HostType.WINDOW;
     gDevTools.showToolbox(target, tool, hostType).then((toolbox) => {
       toolbox.once("destroyed", function() {
         gClient.close();
       });
     }, console.error.bind(console));
     window.close();
   }, console.error.bind(console));
 }
--- a/browser/devtools/framework/gDevTools.jsm
+++ b/browser/devtools/framework/gDevTools.jsm
@@ -5,31 +5,35 @@
 "use strict";
 
 this.EXPORTED_SYMBOLS = [ "gDevTools", "DevTools", "gDevToolsBrowser" ];
 
 const { classes: Cc, interfaces: Ci, utils: Cu } = Components;
 
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 Cu.import("resource://gre/modules/Services.jsm");
-Cu.import("resource://gre/modules/devtools/Loader.jsm");
+const {require, devtools: loader} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
+// Load target and toolbox lazily as they need gDevTools to be fully initialized
+loader.lazyRequireGetter(this, "TargetFactory", "devtools/framework/target", true);
+loader.lazyRequireGetter(this, "Toolbox", "devtools/framework/toolbox", true);
 
 XPCOMUtils.defineLazyModuleGetter(this, "promise",
                                   "resource://gre/modules/Promise.jsm", "Promise");
 XPCOMUtils.defineLazyModuleGetter(this, "console",
                                   "resource://gre/modules/devtools/Console.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "CustomizableUI",
                                   "resource:///modules/CustomizableUI.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "DebuggerServer",
                                   "resource://gre/modules/devtools/dbg-server.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "DebuggerClient",
                                   "resource://gre/modules/devtools/dbg-client.jsm");
 
-const EventEmitter = devtools.require("devtools/toolkit/event-emitter");
-const Telemetry = devtools.require("devtools/shared/telemetry");
+const DefaultTools = require("definitions").defaultTools;
+const EventEmitter = require("devtools/toolkit/event-emitter");
+const Telemetry = require("devtools/shared/telemetry");
 
 const TABS_OPEN_PEAK_HISTOGRAM = "DEVTOOLS_TABS_OPEN_PEAK_LINEAR";
 const TABS_OPEN_AVG_HISTOGRAM = "DEVTOOLS_TABS_OPEN_AVERAGE_LINEAR";
 const TABS_PINNED_PEAK_HISTOGRAM = "DEVTOOLS_TABS_PINNED_PEAK_LINEAR";
 const TABS_PINNED_AVG_HISTOGRAM = "DEVTOOLS_TABS_PINNED_AVERAGE_LINEAR";
 
 const FORBIDDEN_IDS = new Set(["toolbox", ""]);
 const MAX_ORDINAL = 99;
@@ -91,17 +95,17 @@ DevTools.prototype = {
 
     if (!toolId || FORBIDDEN_IDS.has(toolId)) {
       throw new Error("Invalid definition.id");
     }
 
     // Make sure that additional tools will always be able to be hidden.
     // When being called from main.js, defaultTools has not yet been exported.
     // But, we can assume that in this case, it is a default tool.
-    if (devtools.defaultTools && devtools.defaultTools.indexOf(toolDefinition) == -1) {
+    if (DefaultTools && DefaultTools.indexOf(toolDefinition) == -1) {
       toolDefinition.visibilityswitch = "devtools." + toolId + ".enabled";
     }
 
     this._tools.set(toolId, toolDefinition);
 
     this.emit("tool-registered", toolId);
   },
 
@@ -137,23 +141,23 @@ DevTools.prototype = {
    */
   ordinalSort: function DT_ordinalSort(d1, d2) {
     let o1 = (typeof d1.ordinal == "number") ? d1.ordinal : MAX_ORDINAL;
     let o2 = (typeof d2.ordinal == "number") ? d2.ordinal : MAX_ORDINAL;
     return o1 - o2;
   },
 
   getDefaultTools: function DT_getDefaultTools() {
-    return devtools.defaultTools.sort(this.ordinalSort);
+    return DefaultTools.sort(this.ordinalSort);
   },
 
   getAdditionalTools: function DT_getAdditionalTools() {
     let tools = [];
     for (let [key, value] of this._tools) {
-      if (devtools.defaultTools.indexOf(value) == -1) {
+      if (DefaultTools.indexOf(value) == -1) {
         tools.push(value);
       }
     }
     return tools.sort(this.ordinalSort);
   },
 
   /**
    * Get a tool definition if it exists and is enabled.
@@ -389,17 +393,17 @@ DevTools.prototype = {
 
       return hostPromise.then(function() {
         toolbox.raise();
         return toolbox;
       });
     }
     else {
       // No toolbox for target, create one
-      toolbox = new devtools.Toolbox(target, toolId, hostType, hostOptions);
+      toolbox = new Toolbox(target, toolId, hostType, hostOptions);
 
       this.emit("toolbox-created", toolbox);
 
       this._toolboxes.set(target, toolbox);
 
       toolbox.once("destroy", () => {
         this.emit("toolbox-destroy", target);
       });
@@ -532,28 +536,28 @@ let gDevToolsBrowser = {
   },
 
   /**
    * This function is for the benefit of Tools:DevToolbox in
    * browser/base/content/browser-sets.inc and should not be used outside
    * of there
    */
   toggleToolboxCommand: function(gBrowser) {
-    let target = devtools.TargetFactory.forTab(gBrowser.selectedTab);
+    let target = TargetFactory.forTab(gBrowser.selectedTab);
     let toolbox = gDevTools.getToolbox(target);
 
     // If a toolbox exists, using toggle from the Main window :
     // - should close a docked toolbox
     // - should focus a windowed toolbox
-    let isDocked = toolbox && toolbox.hostType != devtools.Toolbox.HostType.WINDOW;
+    let isDocked = toolbox && toolbox.hostType != Toolbox.HostType.WINDOW;
     isDocked ? toolbox.destroy() : gDevTools.showToolbox(target);
   },
 
   toggleBrowserToolboxCommand: function(gBrowser) {
-    let target = devtools.TargetFactory.forWindow(gBrowser.ownerDocument.defaultView);
+    let target = TargetFactory.forWindow(gBrowser.ownerDocument.defaultView);
     let toolbox = gDevTools.getToolbox(target);
 
     toolbox ? toolbox.destroy()
      : gDevTools.showToolbox(target, "inspector", Toolbox.HostType.WINDOW);
   },
 
   /**
    * This function ensures the right commands are enabled in a window,
@@ -645,35 +649,35 @@ let gDevToolsBrowser = {
    * - if the toolbox is open, and the targeted tool is not selected,
    *   we select it
    * - if the toolbox is open, and the targeted tool is selected,
    *   and the host is NOT a window, we close the toolbox
    * - if the toolbox is open, and the targeted tool is selected,
    *   and the host is a window, we raise the toolbox window
    */
   selectToolCommand: function(gBrowser, toolId) {
-    let target = devtools.TargetFactory.forTab(gBrowser.selectedTab);
+    let target = TargetFactory.forTab(gBrowser.selectedTab);
     let toolbox = gDevTools.getToolbox(target);
     let toolDefinition = gDevTools.getToolDefinition(toolId);
 
     if (toolbox &&
         (toolbox.currentToolId == toolId ||
           (toolId == "webconsole" && toolbox.splitConsole)))
     {
       toolbox.fireCustomKey(toolId);
 
-      if (toolDefinition.preventClosingOnKey || toolbox.hostType == devtools.Toolbox.HostType.WINDOW) {
+      if (toolDefinition.preventClosingOnKey || toolbox.hostType == Toolbox.HostType.WINDOW) {
         toolbox.raise();
       } else {
         toolbox.destroy();
       }
       gDevTools.emit("select-tool-command", toolId);
     } else {
       gDevTools.showToolbox(target, toolId).then(() => {
-        let target = devtools.TargetFactory.forTab(gBrowser.selectedTab);
+        let target = TargetFactory.forTab(gBrowser.selectedTab);
         let toolbox = gDevTools.getToolbox(target);
 
         toolbox.fireCustomKey(toolId);
         gDevTools.emit("select-tool-command", toolId);
       });
     }
   },
 
@@ -729,17 +733,17 @@ let gDevToolsBrowser = {
         client.getProcess(contentProcesses[0].id)
               .then(response => {
                 let options = {
                   form: response.form,
                   client: client,
                   chrome: true,
                   isTabActor: false
                 };
-                return devtools.TargetFactory.forRemoteTab(options);
+                return TargetFactory.forRemoteTab(options);
               })
               .then(target => {
                 // Ensure closing the connection in order to cleanup
                 // the debugger client and also the server created in the
                 // content process
                 target.on("close", () => {
                   client.close();
                 });
@@ -751,17 +755,17 @@ let gDevToolsBrowser = {
     return deferred.promise;
   },
 
   openContentProcessToolbox: function () {
     this._getContentProcessTarget()
         .then(target => {
           // Display a new toolbox, in a new window, with debugger by default
           return gDevTools.showToolbox(target, "jsdebugger",
-                                       devtools.Toolbox.HostType.WINDOW);
+                                       Toolbox.HostType.WINDOW);
         });
   },
 
   /**
    * Install WebIDE widget
    */
   installWebIDEWidget: function() {
     if (this.isWebIDEWidgetInstalled()) {
@@ -867,17 +871,17 @@ let gDevToolsBrowser = {
    * dialog.
    */
   setSlowScriptDebugHandler: function DT_setSlowScriptDebugHandler() {
     let debugService = Cc["@mozilla.org/dom/slow-script-debug;1"]
                          .getService(Ci.nsISlowScriptDebug);
     let tm = Cc["@mozilla.org/thread-manager;1"].getService(Ci.nsIThreadManager);
 
     function slowScriptDebugHandler(aTab, aCallback) {
-      let target = devtools.TargetFactory.forTab(aTab);
+      let target = TargetFactory.forTab(aTab);
 
       gDevTools.showToolbox(target, "jsdebugger").then(toolbox => {
         let threadClient = toolbox.getCurrentPanel().panelWin.gThreadClient;
 
         // Break in place, which means resuming the debuggee thread and pausing
         // right before the next step happens.
         switch (threadClient.state) {
           case "paused":
@@ -1169,18 +1173,18 @@ let gDevToolsBrowser = {
   /**
    * Update the "Toggle Tools" checkbox in the developer tools menu. This is
    * called when a toolbox is created or destroyed.
    */
   _updateMenuCheckbox: function DT_updateMenuCheckbox() {
     for (let win of gDevToolsBrowser._trackedBrowserWindows) {
 
       let hasToolbox = false;
-      if (devtools.TargetFactory.isKnownTab(win.gBrowser.selectedTab)) {
-        let target = devtools.TargetFactory.forTab(win.gBrowser.selectedTab);
+      if (TargetFactory.isKnownTab(win.gBrowser.selectedTab)) {
+        let target = TargetFactory.forTab(win.gBrowser.selectedTab);
         if (gDevTools._toolboxes.has(target)) {
           hasToolbox = true;
         }
       }
 
       let broadcaster = win.document.getElementById("devtoolsMenuBroadcaster_DevToolbox");
       if (hasToolbox) {
         broadcaster.setAttribute("checked", "true");
@@ -1318,9 +1322,9 @@ gDevTools.on("tool-unregistered", functi
 });
 
 gDevTools.on("toolbox-ready", gDevToolsBrowser._updateMenuCheckbox);
 gDevTools.on("toolbox-destroyed", gDevToolsBrowser._updateMenuCheckbox);
 
 Services.obs.addObserver(gDevToolsBrowser.destroy, "quit-application", false);
 
 // Load the browser devtools main module as the loader's main module.
-devtools.main("main");
+loader.main("main");
--- a/browser/devtools/framework/test/browser_keybindings_02.js
+++ b/browser/devtools/framework/test/browser_keybindings_02.js
@@ -2,23 +2,25 @@
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 // Test that the toolbox keybindings still work after the host is changed.
 
 const URL = "data:text/html;charset=utf8,test page";
 
+let {Toolbox} = require("devtools/framework/toolbox");
+
 add_task(function*() {
   info("Create a test tab and open the toolbox");
   let tab = yield addTab(URL);
   let target = TargetFactory.forTab(tab);
   let toolbox = yield gDevTools.showToolbox(target, "webconsole");
 
-  let {SIDE, BOTTOM} = devtools.Toolbox.HostType;
+  let {SIDE, BOTTOM} = Toolbox.HostType;
   for (let type of [SIDE, BOTTOM, SIDE]) {
     info("Switch to host type " + type);
     yield toolbox.switchHost(type);
 
     info("Try to use the toolbox shortcuts");
     yield checkKeyBindings(toolbox);
   }
 
--- a/browser/devtools/framework/test/browser_keybindings_03.js
+++ b/browser/devtools/framework/test/browser_keybindings_03.js
@@ -3,25 +3,27 @@
 
 "use strict";
 
 // Test that the toolbox 'switch to previous host' feature works.
 // Pressing ctrl/cmd+shift+d should switch to the last used host.
 
 const URL = "data:text/html;charset=utf8,test page for toolbox switching";
 
+let {Toolbox} = require("devtools/framework/toolbox");
+
 add_task(function*() {
   info("Create a test tab and open the toolbox");
   let tab = yield addTab(URL);
   let target = TargetFactory.forTab(tab);
   let toolbox = yield gDevTools.showToolbox(target, "webconsole");
 
   let keyElement = toolbox.doc.getElementById("toolbox-toggle-host-key");
 
-  let {SIDE, BOTTOM, WINDOW} = devtools.Toolbox.HostType;
+  let {SIDE, BOTTOM, WINDOW} = Toolbox.HostType;
   checkHostType(toolbox, BOTTOM, SIDE);
 
   info ("Switching from bottom to side");
   synthesizeKeyElement(keyElement);
   yield toolbox.once("host-changed");
   checkHostType(toolbox, SIDE, BOTTOM);
 
   info ("Switching from side to bottom");
--- a/browser/devtools/framework/test/browser_target_remote.js
+++ b/browser/devtools/framework/test/browser_target_remote.js
@@ -1,26 +1,23 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
-let { devtools } =
-  Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
-
 // Ensure target is closed if client is closed directly
 function test() {
   waitForExplicitFinish();
 
   getChromeActors((client, response) => {
     let options = {
       form: response,
       client: client,
       chrome: true
     };
 
-    devtools.TargetFactory.forRemoteTab(options).then(target => {
+    TargetFactory.forRemoteTab(options).then(target => {
       target.on("close", () => {
         ok(true, "Target was closed");
         finish();
       });
       client.close();
     });
   });
 }
--- a/browser/devtools/framework/test/browser_target_support.js
+++ b/browser/devtools/framework/test/browser_target_support.js
@@ -1,20 +1,18 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Test support methods on Target, such as `hasActor`, `getActorDescription`,
 // `actorHasMethod` and `getTrait`.
 
-let { devtools } =
-  Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 let { Task } =
   Cu.import("resource://gre/modules/Task.jsm", {});
 let { WebAudioFront } =
-  devtools.require("devtools/server/actors/webaudio");
+  require("devtools/server/actors/webaudio");
 
 function* testTarget (client, target) {
   yield target.makeRemote();
 
   is(target.hasActor("timeline"), true, "target.hasActor() true when actor exists.");
   is(target.hasActor("webaudio"), true, "target.hasActor() true when actor exists.");
   is(target.hasActor("notreal"), false, "target.hasActor() false when actor does not exist.");
   // Create a front to ensure the actor is loaded
@@ -58,17 +56,17 @@ function test() {
 
   getChromeActors((client, response) => {
     let options = {
       form: response,
       client: client,
       chrome: true
     };
 
-    devtools.TargetFactory.forRemoteTab(options).then(Task.async(testTarget).bind(null, client));
+    TargetFactory.forRemoteTab(options).then(Task.async(testTarget).bind(null, client));
   });
 }
 
 function close (target, client) {
   target.on("close", () => {
     ok(true, "Target was closed");
     finish();
   });
--- a/browser/devtools/framework/test/browser_toolbox_custom_host.js
+++ b/browser/devtools/framework/test/browser_toolbox_custom_host.js
@@ -1,16 +1,14 @@
 /* vim: set ts=2 et sw=2 tw=80: */
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 function test() {
-  let {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
-
-  let Toolbox = devtools.Toolbox;
+  let {Toolbox} = require("devtools/framework/toolbox");
 
   let toolbox, iframe, target, tab;
 
   gBrowser.selectedTab = gBrowser.addTab();
   target = TargetFactory.forTab(gBrowser.selectedTab);
 
   window.addEventListener("message", onMessage);
 
--- a/browser/devtools/framework/test/browser_toolbox_highlight.js
+++ b/browser/devtools/framework/test/browser_toolbox_highlight.js
@@ -1,16 +1,13 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
-let Toolbox = devtools.Toolbox;
-let temp = {};
-Cu.import("resource://gre/modules/Services.jsm", temp);
-let Services = temp.Services;
-temp = null;
+let {Toolbox} = require("devtools/framework/toolbox");
+
 let toolbox = null;
 
 function test() {
   const URL = "data:text/plain;charset=UTF-8,Nothing to see here, move along";
 
   const TOOL_ID_1 = "jsdebugger";
   const TOOL_ID_2 = "webconsole";
 
--- a/browser/devtools/framework/test/browser_toolbox_hosts.js
+++ b/browser/devtools/framework/test/browser_toolbox_hosts.js
@@ -1,15 +1,16 @@
 /* vim: set ts=2 et sw=2 tw=80: */
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
-let {SIDE, BOTTOM, WINDOW} = devtools.Toolbox.HostType;
+let {Toolbox} = require("devtools/framework/toolbox");
+let {SIDE, BOTTOM, WINDOW} = Toolbox.HostType;
 let toolbox, target;
 
 const URL = "data:text/html;charset=utf8,test for opening toolbox in different hosts";
 
 add_task(function* runTest() {
   info("Create a test tab and open the toolbox");
   let tab = yield addTab(URL);
   target = TargetFactory.forTab(tab);
--- a/browser/devtools/framework/test/browser_toolbox_hosts_size.js
+++ b/browser/devtools/framework/test/browser_toolbox_hosts_size.js
@@ -5,16 +5,18 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that getPanelWhenReady returns the correct panel in promise
 // resolutions regardless of whether it has opened first.
 
 const URL = "data:text/html;charset=utf8,test for host sizes";
 
+let {Toolbox} = require("devtools/framework/toolbox");
+
 add_task(function*() {
   // Set size prefs to make the hosts way too big, so that the size has
   // to be clamped to fit into the browser window.
   Services.prefs.setIntPref("devtools.toolbox.footer.height", 10000);
   Services.prefs.setIntPref("devtools.toolbox.sidebar.width", 10000);
 
   let tab = yield addTab(URL);
   let nbox = gBrowser.getNotificationBox();
@@ -22,17 +24,17 @@ add_task(function*() {
   let toolbox = yield gDevTools.showToolbox(TargetFactory.forTab(tab));
 
   is (nbox.clientHeight, nboxHeight, "Opening the toolbox hasn't changed the height of the nbox");
   is (nbox.clientWidth, nboxWidth, "Opening the toolbox hasn't changed the width of the nbox");
 
   let iframe = document.getAnonymousElementByAttribute(nbox, "class", "devtools-toolbox-bottom-iframe");
   is (iframe.clientHeight, nboxHeight - 25, "The iframe fits within the available space");
 
-  yield toolbox.switchHost(devtools.Toolbox.HostType.SIDE);
+  yield toolbox.switchHost(Toolbox.HostType.SIDE);
   iframe = document.getAnonymousElementByAttribute(nbox, "class", "devtools-toolbox-side-iframe");
   iframe.style.minWidth = "1px"; // Disable the min width set in css
   is (iframe.clientWidth, nboxWidth - 25, "The iframe fits within the available space");
 
   yield cleanup(toolbox);
 });
 
 add_task(function*() {
@@ -47,17 +49,17 @@ add_task(function*() {
   let toolbox = yield gDevTools.showToolbox(TargetFactory.forTab(tab));
 
   is (nbox.clientHeight, nboxHeight, "Opening the toolbox hasn't changed the height of the nbox");
   is (nbox.clientWidth, nboxWidth, "Opening the toolbox hasn't changed the width of the nbox");
 
   let iframe = document.getAnonymousElementByAttribute(nbox, "class", "devtools-toolbox-bottom-iframe");
   is (iframe.clientHeight, 100, "The iframe is resized properly");
 
-  yield toolbox.switchHost(devtools.Toolbox.HostType.SIDE);
+  yield toolbox.switchHost(Toolbox.HostType.SIDE);
   iframe = document.getAnonymousElementByAttribute(nbox, "class", "devtools-toolbox-side-iframe");
   iframe.style.minWidth = "1px"; // Disable the min width set in css
   is (iframe.clientWidth, 100, "The iframe is resized properly");
 
   yield cleanup(toolbox);
 });
 
 function* cleanup(toolbox) {
--- a/browser/devtools/framework/test/browser_toolbox_minimize.js
+++ b/browser/devtools/framework/test/browser_toolbox_minimize.js
@@ -5,16 +5,17 @@
 
 // Test that when the toolbox is displayed in a bottom host, that host can be
 // minimized to just the tabbar height, and maximized again.
 // Also test that while minimized, switching to a tool, clicking on the
 // settings, or clicking on the selected tool's tab maximizes the toolbox again.
 // Finally test that the minimize button doesn't exist in other host types.
 
 const URL = "data:text/html;charset=utf8,test page";
+const {Toolbox} = require("devtools/framework/toolbox");
 
 add_task(function*() {
   info("Create a test tab and open the toolbox");
   let tab = yield addTab(URL);
   let target = TargetFactory.forTab(tab);
   let toolbox = yield gDevTools.showToolbox(target, "webconsole");
 
   let button = toolbox.doc.querySelector("#toolbox-dock-bottom-minimize");
@@ -56,17 +57,17 @@ add_task(function*() {
   info("Minimize again and click on the settings tab");
   yield minimize(toolbox);
   onMaximized = toolbox._host.once("maximized");
   let settingsButton = toolbox.doc.querySelector("#toolbox-tab-options");
   EventUtils.synthesizeMouseAtCenter(settingsButton, {}, toolbox.doc.defaultView);
   yield onMaximized;
 
   info("Switch to a different host");
-  yield toolbox.switchHost(devtools.Toolbox.HostType.SIDE);
+  yield toolbox.switchHost(Toolbox.HostType.SIDE);
   button = toolbox.doc.querySelector("#toolbox-dock-bottom-minimize");
   ok(!button, "The minimize button doesn't exist in the side host");
 
   Services.prefs.clearUserPref("devtools.toolbox.host");
   yield toolbox.destroy();
   gBrowser.removeCurrentTab();
 });
 
--- a/browser/devtools/framework/test/browser_toolbox_raise.js
+++ b/browser/devtools/framework/test/browser_toolbox_raise.js
@@ -1,21 +1,13 @@
 /* vim: set ts=2 et sw=2 tw=80: */
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
-Cu.import("resource://gre/modules/Services.jsm");
-let temp = {}
-Cu.import("resource:///modules/devtools/gDevTools.jsm", temp);
-let DevTools = temp.DevTools;
-
-Cu.import("resource://gre/modules/devtools/Loader.jsm", temp);
-let devtools = temp.devtools;
-
-let Toolbox = devtools.Toolbox;
+let {Toolbox} = require("devtools/framework/toolbox");
 
 let toolbox, target, tab1, tab2;
 
 function test() {
   gBrowser.selectedTab = tab1 = gBrowser.addTab();
   tab2 = gBrowser.addTab();
   target = TargetFactory.forTab(gBrowser.selectedTab);
 
@@ -75,14 +67,14 @@ function onFocus() {
   // Now raise toolbox.
   toolbox.raise();
 }
 
 function cleanup() {
   Services.prefs.setCharPref("devtools.toolbox.host", Toolbox.HostType.BOTTOM);
 
   toolbox.destroy().then(function() {
-    DevTools = Toolbox = toolbox = target = null;
+    toolbox = target = null;
     gBrowser.removeCurrentTab();
     gBrowser.removeCurrentTab();
     finish();
   });
 }
--- a/browser/devtools/framework/test/browser_toolbox_sidebar.js
+++ b/browser/devtools/framework/test/browser_toolbox_sidebar.js
@@ -1,14 +1,14 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
 function test() {
   const Cu = Components.utils;
-  let {ToolSidebar} = devtools.require("devtools/framework/sidebar");
+  let {ToolSidebar} = require("devtools/framework/sidebar");
 
   const toolURL = "data:text/xml;charset=utf8,<?xml version='1.0'?>" +
                   "<?xml-stylesheet href='chrome://browser/skin/devtools/common.css' type='text/css'?>" +
                   "<window xmlns='http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul'>" +
                   "<hbox flex='1'><description flex='1'>foo</description><splitter class='devtools-side-splitter'/>" +
                   "<tabbox flex='1' id='sidebar' class='devtools-sidebar-tabs'><tabs/><tabpanels flex='1'/></tabbox>" +
                   "</hbox>" +
                   "</window>";
--- a/browser/devtools/framework/test/browser_toolbox_sidebar_events.js
+++ b/browser/devtools/framework/test/browser_toolbox_sidebar_events.js
@@ -1,14 +1,14 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
 function test() {
   const Cu = Components.utils;
-  const { ToolSidebar } = devtools.require("devtools/framework/sidebar");
+  const { ToolSidebar } = require("devtools/framework/sidebar");
 
   const toolURL = "data:text/xml;charset=utf8,<?xml version='1.0'?>" +
                   "<?xml-stylesheet href='chrome://browser/skin/devtools/common.css' type='text/css'?>" +
                   "<window xmlns='http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul'>" +
                   "<hbox flex='1'><description flex='1'>foo</description><splitter class='devtools-side-splitter'/>" +
                   "<tabbox flex='1' id='sidebar' class='devtools-sidebar-tabs'><tabs/><tabpanels flex='1'/></tabbox>" +
                   "</hbox>" +
                   "</window>";
--- a/browser/devtools/framework/test/browser_toolbox_sidebar_existing_tabs.js
+++ b/browser/devtools/framework/test/browser_toolbox_sidebar_existing_tabs.js
@@ -1,15 +1,15 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 "use strict";
 
 // Test that the sidebar widget auto-registers existing tabs.
 
-const {ToolSidebar} = devtools.require("devtools/framework/sidebar");
+const {ToolSidebar} = require("devtools/framework/sidebar");
 
 const testToolURL = "data:text/xml;charset=utf8,<?xml version='1.0'?>" +
                 "<?xml-stylesheet href='chrome://browser/skin/devtools/common.css' type='text/css'?>" +
                 "<window xmlns='http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul'>" +
                 "<hbox flex='1'><description flex='1'>test tool</description>" +
                 "<splitter class='devtools-side-splitter'/>" +
                 "<tabbox flex='1' id='sidebar' class='devtools-sidebar-tabs'>" +
                 "<tabs><tab id='tab1' label='tab 1'></tab><tab id='tab2' label='tab 2'></tab></tabs>" +
--- a/browser/devtools/framework/test/browser_toolbox_sidebar_overflow_menu.js
+++ b/browser/devtools/framework/test/browser_toolbox_sidebar_overflow_menu.js
@@ -1,16 +1,16 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 "use strict";
 
 // Test that the sidebar widget correctly displays the "all tabs..." button
 // when the tabs overflow.
 
-const {ToolSidebar} = devtools.require("devtools/framework/sidebar");
+const {ToolSidebar} = require("devtools/framework/sidebar");
 
 const testToolDefinition = {
   id: "testTool",
   url: CHROME_URL_ROOT + "browser_toolbox_sidebar_tool.xul",
   label: "Test Tool",
   isTargetSupported: () => true,
   build: (iframeWindow, toolbox) => {
     return {
--- a/browser/devtools/framework/test/browser_toolbox_tabsswitch_shortcuts.js
+++ b/browser/devtools/framework/test/browser_toolbox_tabsswitch_shortcuts.js
@@ -1,12 +1,12 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
-let Toolbox = devtools.Toolbox;
+let {Toolbox} = require("devtools/framework/toolbox");
 
 let toolbox, toolIDs, idIndex, secondTime = false,
     reverse = false, nextKey = null, prevKey = null;
 
 function test() {
   addTab("about:blank").then(function() {
     let target = TargetFactory.forTab(gBrowser.selectedTab);
     idIndex = 0;
--- a/browser/devtools/framework/test/browser_toolbox_toggle.js
+++ b/browser/devtools/framework/test/browser_toolbox_toggle.js
@@ -3,16 +3,18 @@
 
 "use strict";
 
 // Test toggling the toolbox with ACCEL+SHIFT+I / ACCEL+ALT+I and F12 in docked
 // and detached (window) modes.
 
 const URL = "data:text/html;charset=utf-8,Toggling devtools using shortcuts";
 
+let {Toolbox} = require("devtools/framework/toolbox");
+
 add_task(function*() {
   // Test with ACCEL+SHIFT+I / ACCEL+ALT+I (MacOSX) ; modifiers should match :
   // - toolbox-key-toggle in browser/devtools/framework/toolbox-window.xul
   // - key_devToolboxMenuItem in browser/base/content/browser.xul
   info("Test toggle using CTRL+SHIFT+I/CMD+ALT+I");
   yield testToggle("I", {
     accelKey: true,
     shiftKey: !navigator.userAgent.match(/Mac/),
@@ -32,17 +34,17 @@ function* testToggle(key, modifiers) {
   yield testToggleDetachedToolbox(tab, key, modifiers);
 
   yield cleanup();
 }
 
 function* testToggleDockedToolbox (tab, key, modifiers) {
   let toolbox = getToolboxForTab(tab);
 
-  isnot(toolbox.hostType, devtools.Toolbox.HostType.WINDOW,
+  isnot(toolbox.hostType, Toolbox.HostType.WINDOW,
     "Toolbox is docked in the main window");
 
   info("verify docked toolbox is destroyed when using toggle key");
   let onToolboxDestroyed = once(gDevTools, "toolbox-destroyed");
   EventUtils.synthesizeKey(key, modifiers);
   yield onToolboxDestroyed;
   ok(true, "Docked toolbox is destroyed when using a toggle key");
 
@@ -53,18 +55,18 @@ function* testToggleDockedToolbox (tab, 
   ok(true, "Toolbox is created by using when toggle key");
 }
 
 function* testToggleDetachedToolbox (tab, key, modifiers) {
   let toolbox = getToolboxForTab(tab);
 
   info("change the toolbox hostType to WINDOW");
 
-  yield toolbox.switchHost(devtools.Toolbox.HostType.WINDOW);
-  is(toolbox.hostType, devtools.Toolbox.HostType.WINDOW,
+  yield toolbox.switchHost(Toolbox.HostType.WINDOW);
+  is(toolbox.hostType, Toolbox.HostType.WINDOW,
     "Toolbox opened on separate window");
 
   info("Wait for focus on the toolbox window");
   yield new Promise(res => waitForFocus(res, toolbox.frame.contentWindow));
 
   info("Focus main window to put the toolbox window in the background");
 
   let onMainWindowFocus = once(window, "focus");
@@ -90,11 +92,11 @@ function* testToggleDetachedToolbox (tab
 }
 
 function getToolboxForTab(tab) {
   return gDevTools.getToolbox(TargetFactory.forTab(tab));
 }
 
 function* cleanup() {
   Services.prefs.setCharPref("devtools.toolbox.host",
-    devtools.Toolbox.HostType.BOTTOM);
+    Toolbox.HostType.BOTTOM);
   gBrowser.removeCurrentTab();
 }
--- a/browser/devtools/framework/test/browser_toolbox_transport_events.js
+++ b/browser/devtools/framework/test/browser_toolbox_transport_events.js
@@ -1,12 +1,12 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
-const { on, off } = devtools.require("sdk/event/core");
+const { on, off } = require("sdk/event/core");
 const { DebuggerClient } = Cu.import("resource://gre/modules/devtools/dbg-client.jsm", {});
 
 function test() {
   gDevTools.on("toolbox-created", onToolboxCreated);
   on(DebuggerClient, "connect", onDebuggerClientConnect);
 
   addTab("about:blank").then(function() {
     let target = TargetFactory.forTab(gBrowser.selectedTab);
--- a/browser/devtools/framework/test/browser_toolbox_window_reload_target.js
+++ b/browser/devtools/framework/test/browser_toolbox_window_reload_target.js
@@ -1,16 +1,16 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
 const TEST_URL = "data:text/html;charset=utf-8,"+
                  "<html><head><title>Test reload</title></head>"+
                  "<body><h1>Testing reload from devtools</h1></body></html>";
 
-let Toolbox = devtools.Toolbox;
+let {Toolbox} = require("devtools/framework/toolbox");
 
 let target, toolbox, description, reloadsSent, toolIDs;
 
 function test() {
   addTab(TEST_URL).then(() => {
     target = TargetFactory.forTab(gBrowser.selectedTab);
 
     target.makeRemote().then(() => {
--- a/browser/devtools/framework/test/browser_toolbox_window_shortcuts.js
+++ b/browser/devtools/framework/test/browser_toolbox_window_shortcuts.js
@@ -1,12 +1,12 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
-let Toolbox = devtools.Toolbox;
+let {Toolbox} = require("devtools/framework/toolbox");
 
 let toolbox, toolIDs, idIndex, modifiedPrefs = [];
 
 function test() {
   addTab("about:blank").then(function() {
     toolIDs = [];
     for (let [id, definition] of gDevTools._tools) {
       if (definition.key) {
--- a/browser/devtools/framework/test/browser_toolbox_window_title_changes.js
+++ b/browser/devtools/framework/test/browser_toolbox_window_title_changes.js
@@ -1,16 +1,12 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
-let Toolbox = devtools.Toolbox;
-let temp = {};
-Cu.import("resource://gre/modules/Services.jsm", temp);
-let Services = temp.Services;
-temp = null;
+let {Toolbox} = require("devtools/framework/toolbox");
 
 function test() {
   const URL_1 = "data:text/plain;charset=UTF-8,abcde";
   const URL_2 = "data:text/plain;charset=UTF-8,12345";
 
   const TOOL_ID_1 = "webconsole";
   const TOOL_ID_2 = "jsdebugger";
 
--- a/browser/devtools/framework/test/browser_two_tabs.js
+++ b/browser/devtools/framework/test/browser_two_tabs.js
@@ -4,18 +4,16 @@
 /**
  * Check regression when opening two tabs
  */
 
 let { DebuggerServer } =
   Cu.import("resource://gre/modules/devtools/dbg-server.jsm", {});
 let { DebuggerClient } =
   Cu.import("resource://gre/modules/devtools/dbg-client.jsm", {});
-let { devtools } =
-  Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 
 const TAB_URL_1 = "data:text/html;charset=utf-8,foo";
 const TAB_URL_2 = "data:text/html;charset=utf-8,bar";
 
 let gClient;
 let gTab1, gTab2;
 let gTabActor1, gTabActor2;
 
--- a/browser/devtools/framework/test/head.js
+++ b/browser/devtools/framework/test/head.js
@@ -122,17 +122,17 @@ function synthesizeKeyElement(el) {
   info(`Synthesizing: key=${key}, mod=${JSON.stringify(mod)}`);
   EventUtils.synthesizeKey(key, mod, el.ownerDocument.defaultView);
 }
 
 /* Check the toolbox host type and prefs to make sure they match the
  * expected values
  * @param {Toolbox}
  * @param {HostType} hostType
- *        One of {SIDE, BOTTOM, WINDOW} from devtools.Toolbox.HostType
+ *        One of {SIDE, BOTTOM, WINDOW} from Toolbox.HostType
  * @param {HostType} Optional previousHostType
  *        The host that will be switched to when calling switchToPreviousHost
  */
 function checkHostType(toolbox, hostType, previousHostType) {
   is(toolbox.hostType, hostType, "host type is " + hostType);
 
   let pref = Services.prefs.getCharPref("devtools.toolbox.host");
   is(pref, hostType, "host pref is " + hostType);
--- a/browser/devtools/framework/test/shared-head.js
+++ b/browser/devtools/framework/test/shared-head.js
@@ -3,19 +3,18 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 // This shared-head.js file is used for multiple directories in devtools.
 const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
 const {Services} = Cu.import("resource://gre/modules/Services.jsm", {});
 const {gDevTools} = Cu.import("resource:///modules/devtools/gDevTools.jsm", {});
 const {console} = Cu.import("resource://gre/modules/devtools/Console.jsm", {});
 const {ScratchpadManager} = Cu.import("resource:///modules/devtools/scratchpad-manager.jsm", {});
-const {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
-const {require} = devtools;
-const {TargetFactory} = devtools;
+const {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
+const {TargetFactory} = require("devtools/framework/target");
 const DevToolsUtils = require("devtools/toolkit/DevToolsUtils");
 const promise = require("promise");
 
 const TEST_DIR = gTestPath.substr(0, gTestPath.lastIndexOf("/"));
 const CHROME_URL_ROOT = TEST_DIR + "/";
 const URL_ROOT = CHROME_URL_ROOT.replace("chrome://mochitests/content/", "http://example.com/");
 
 // All test are asynchronous
--- a/browser/devtools/framework/toolbox-process-window.js
+++ b/browser/devtools/framework/toolbox-process-window.js
@@ -1,17 +1,19 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 "use strict";
 
 const { classes: Cc, interfaces: Ci, utils: Cu } = Components;
 
 let { gDevTools } = Cu.import("resource:///modules/devtools/gDevTools.jsm", {});
-let { devtools } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
+let { require } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
+let { TargetFactory } = require("devtools/framework/target");
+let { Toolbox } = require("devtools/framework/toolbox");
 let { Services } = Cu.import("resource://gre/modules/Services.jsm", {});
 let { DebuggerClient } =
   Cu.import("resource://gre/modules/devtools/dbg-client.jsm", {});
 let { ViewHelpers } =
   Cu.import("resource:///modules/devtools/ViewHelpers.jsm", {});
 let { Task } = Cu.import("resource://gre/modules/Task.jsm", {});
 
 /**
@@ -75,34 +77,34 @@ function onCloseCommand(event) {
 
 function openToolbox({ form, chrome, isTabActor }) {
   let options = {
     form: form,
     client: gClient,
     chrome: chrome,
     isTabActor: isTabActor
   };
-  devtools.TargetFactory.forRemoteTab(options).then(target => {
+  TargetFactory.forRemoteTab(options).then(target => {
     let frame = document.getElementById("toolbox-iframe");
     let selectedTool = "jsdebugger";
 
     try {
       // Remember the last panel that was used inside of this profile.
       selectedTool = Services.prefs.getCharPref("devtools.toolbox.selectedTool");
     } catch(e) {}
 
     try {
       // But if we are testing, then it should always open the debugger panel.
       selectedTool = Services.prefs.getCharPref("devtools.browsertoolbox.panel");
     } catch(e) {}
 
     let options = { customIframe: frame };
     gDevTools.showToolbox(target,
                           selectedTool,
-                          devtools.Toolbox.HostType.CUSTOM,
+                          Toolbox.HostType.CUSTOM,
                           options)
              .then(onNewToolbox);
   });
 }
 
 function onNewToolbox(toolbox) {
    gToolbox = toolbox;
    bindToolboxHandlers();
--- a/browser/devtools/inspector/test/head.js
+++ b/browser/devtools/inspector/test/head.js
@@ -19,17 +19,18 @@ const Cc = Components.classes;
 const TEST_URL_ROOT = "http://example.com/browser/browser/devtools/inspector/test/";
 const ROOT_TEST_DIR = getRootDirectory(gTestPath);
 const FRAME_SCRIPT_URL = ROOT_TEST_DIR + "doc_frame_script.js";
 const { Promise: promise } = Cu.import("resource://gre/modules/Promise.jsm", {});
 
 // All test are asynchronous
 waitForExplicitFinish();
 
-let {TargetFactory, require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {}).devtools;
+let {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
+let {TargetFactory} = require("devtools/framework/target");
 let {console} = Cu.import("resource://gre/modules/devtools/Console.jsm", {});
 let DevToolsUtils = require("devtools/toolkit/DevToolsUtils");
 
 // Import the GCLI test helper
 let testDir = gTestPath.substr(0, gTestPath.lastIndexOf("/"));
 Services.scriptloader.loadSubScript(testDir + "../../../commandline/test/helpers.js", this);
 
 DevToolsUtils.testing = true;
--- a/browser/devtools/layoutview/test/head.js
+++ b/browser/devtools/layoutview/test/head.js
@@ -1,21 +1,21 @@
 /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
 /* Any copyright is dedicated to the Public Domain.
  http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 const Cu = Components.utils;
 let {gDevTools} = Cu.import("resource:///modules/devtools/gDevTools.jsm", {});
-let {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
-let TargetFactory = devtools.TargetFactory;
+let {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
+let {TargetFactory} = require("devtools/framework/target");
 let {Promise: promise} = Cu.import("resource://gre/modules/Promise.jsm", {});
 let {console} = Components.utils.import("resource://gre/modules/devtools/Console.jsm", {});
-let DevToolsUtils = devtools.require("devtools/toolkit/DevToolsUtils");
+let DevToolsUtils = require("devtools/toolkit/DevToolsUtils");
 
 // All test are asynchronous
 waitForExplicitFinish();
 
 const TEST_URL_ROOT = "http://example.com/browser/browser/devtools/layoutview/test/";
 
 // Uncomment this pref to dump all devtools emitted events to the console.
 // Services.prefs.setBoolPref("devtools.dump.emit", true);
--- a/browser/devtools/layoutview/view.js
+++ b/browser/devtools/layoutview/view.js
@@ -5,21 +5,20 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 /* globals ViewHelpers, window, document */
 
 "use strict";
 
 const {utils: Cu, interfaces: Ci, classes: Cc} = Components;
 
 Cu.import("resource://gre/modules/Task.jsm");
-Cu.import("resource://gre/modules/devtools/Loader.jsm");
+const {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 Cu.import("resource://gre/modules/devtools/Console.jsm");
 Cu.import("resource:///modules/devtools/ViewHelpers.jsm");
 
-const {require} = devtools;
 const {InplaceEditor, editableItem} = require("devtools/shared/inplace-editor");
 const {ReflowFront} = require("devtools/server/actors/layout");
 
 const STRINGS_URI = "chrome://browser/locale/devtools/shared.properties";
 const SHARED_L10N = new ViewHelpers.L10N(STRINGS_URI);
 const NUMERIC = /^-?[\d\.]+$/;
 const LONG_TEXT_ROTATE_LIMIT = 3;
 
--- a/browser/devtools/markupview/test/actor_events_form.js
+++ b/browser/devtools/markupview/test/actor_events_form.js
@@ -7,18 +7,17 @@
 // on NodeActor. Custom form property is set when 'form' event is sent
 // by NodeActor actor (see 'onNodeActorForm' method).
 
 const Events = require("sdk/event/core");
 const {ActorClass, Actor, FrontClass, Front, method} =
   require("devtools/server/protocol");
 
 const {Cu} = require("chrome");
-const {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
-const {NodeActor} = devtools.require("devtools/server/actors/inspector");
+const {NodeActor} = require("devtools/server/actors/inspector");
 
 const EventsFormActor = ActorClass({
   typeName: "eventsFormActor",
 
   initialize: function() {
     Actor.prototype.initialize.apply(this, arguments);
   },
 
--- a/browser/devtools/markupview/test/browser_markupview_events_form.js
+++ b/browser/devtools/markupview/test/browser_markupview_events_form.js
@@ -7,18 +7,18 @@
 // Testing the feature whereby custom registered actors can listen to
 // 'form' events sent by the NodeActor to hook custom data to it.
 // The test registers one backend actor providing custom form data
 // and checks that the value is properly sent to the client (NodeFront).
 
 const TEST_PAGE_URL = TEST_URL_ROOT + "doc_markup_events_form.html";
 const TEST_ACTOR_URL = CHROME_BASE + "actor_events_form.js";
 
-let {ActorRegistryFront} = devtools.require("devtools/server/actors/actor-registry");
-let {EventsFormFront} = devtools.require(TEST_ACTOR_URL);
+let {ActorRegistryFront} = require("devtools/server/actors/actor-registry");
+let {EventsFormFront} = require(TEST_ACTOR_URL);
 
 add_task(function*() {
   info("Opening the Toolbox");
   let {tab} = yield addTab(TEST_PAGE_URL);
   let {toolbox} = yield openToolbox("webconsole");
 
   info("Registering test actor");
   let {registrar, front} = yield registerTestActor(toolbox);
--- a/browser/devtools/markupview/test/head.js
+++ b/browser/devtools/markupview/test/head.js
@@ -1,22 +1,22 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 const Cu = Components.utils;
-let {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
-let TargetFactory = devtools.TargetFactory;
+let {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
+let {TargetFactory} = require("devtools/framework/target");
 let {console} = Cu.import("resource://gre/modules/devtools/Console.jsm", {});
-let promise = devtools.require("resource://gre/modules/Promise.jsm").Promise;
-let {getInplaceEditorForSpan: inplaceEditor} = devtools.require("devtools/shared/inplace-editor");
-let clipboard = devtools.require("sdk/clipboard");
-let {setTimeout, clearTimeout} = devtools.require("sdk/timers");
-let {promiseInvoke} = devtools.require("devtools/async-utils");
-let DevToolsUtils = devtools.require("devtools/toolkit/DevToolsUtils");
+let promise = require("resource://gre/modules/Promise.jsm").Promise;
+let {getInplaceEditorForSpan: inplaceEditor} = require("devtools/shared/inplace-editor");
+let clipboard = require("sdk/clipboard");
+let {setTimeout, clearTimeout} = require("sdk/timers");
+let {promiseInvoke} = require("devtools/async-utils");
+let DevToolsUtils = require("devtools/toolkit/DevToolsUtils");
 
 // All test are asynchronous
 waitForExplicitFinish();
 
 // If a test times out we want to see the complete log and not just the last few
 // lines.
 SimpleTest.requestCompleteLog();
 
--- a/browser/devtools/netmonitor/har/har-automation.js
+++ b/browser/devtools/netmonitor/har/har-automation.js
@@ -1,16 +1,15 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 "use strict";
 
 const { Cu, Ci, Cc } = require("chrome");
 const { Class } = require("sdk/core/heritage");
-const { devtools } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 const { defer, resolve } = require("sdk/core/promise");
 const { Services } = Cu.import("resource://gre/modules/Services.jsm", {});
 
 Cu.import("resource://gre/modules/Task.jsm");
 
 loader.lazyRequireGetter(this, "HarCollector", "devtools/netmonitor/har/har-collector", true);
 loader.lazyRequireGetter(this, "HarExporter", "devtools/netmonitor/har/har-exporter", true);
 loader.lazyRequireGetter(this, "HarUtils", "devtools/netmonitor/har/har-utils", true);
--- a/browser/devtools/netmonitor/har/har-builder.js
+++ b/browser/devtools/netmonitor/har/har-builder.js
@@ -1,17 +1,16 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 "use strict";
 
 const { Cu, Ci, Cc } = require("chrome");
 const { defer, all, resolve } = require("sdk/core/promise");
 const { Services } = Cu.import("resource://gre/modules/Services.jsm", {});
-const { devtools } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 
 loader.lazyImporter(this, "ViewHelpers", "resource:///modules/devtools/ViewHelpers.jsm");
 loader.lazyRequireGetter(this, "NetworkHelper", "devtools/toolkit/webconsole/network-helper");
 
 loader.lazyGetter(this, "appInfo", () => {
   return Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULAppInfo);
 });
 
--- a/browser/devtools/netmonitor/har/toolbox-overlay.js
+++ b/browser/devtools/netmonitor/har/toolbox-overlay.js
@@ -1,15 +1,14 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 "use strict";
 
 const { Cu, Ci } = require("chrome");
-const { devtools } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 
 loader.lazyRequireGetter(this, "HarAutomation", "devtools/netmonitor/har/har-automation", true);
 
 // Map of all created overlays. There is always one instance of
 // an overlay per Toolbox instance (i.e. one per browser tab).
 const overlays = new WeakMap();
 
 /**
--- a/browser/devtools/netmonitor/netmonitor-controller.js
+++ b/browser/devtools/netmonitor/netmonitor-controller.js
@@ -112,17 +112,17 @@ const ACTIVITY_TYPE = {
 
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 Cu.import("resource:///modules/devtools/SideMenuWidget.jsm");
 Cu.import("resource:///modules/devtools/VariablesView.jsm");
 Cu.import("resource:///modules/devtools/VariablesViewController.jsm");
 Cu.import("resource:///modules/devtools/ViewHelpers.jsm");
 
-const require = Cu.import("resource://gre/modules/devtools/Loader.jsm", {}).devtools.require;
+const {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 const promise = Cu.import("resource://gre/modules/Promise.jsm", {}).Promise;
 const EventEmitter = require("devtools/toolkit/event-emitter");
 const Editor = require("devtools/sourceeditor/editor");
 const {Tooltip} = require("devtools/shared/widgets/Tooltip");
 const {ToolSidebar} = require("devtools/framework/sidebar");
 const DevToolsUtils = require("devtools/toolkit/DevToolsUtils");
 
 XPCOMUtils.defineLazyModuleGetter(this, "Chart",
--- a/browser/devtools/netmonitor/netmonitor-view.js
+++ b/browser/devtools/netmonitor/netmonitor-view.js
@@ -1,23 +1,21 @@
 /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
 /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 "use strict";
 
-const { devtools } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
-
 XPCOMUtils.defineLazyGetter(this, "HarExporter", function() {
-  return devtools.require("devtools/netmonitor/har/har-exporter.js").HarExporter;
+  return require("devtools/netmonitor/har/har-exporter.js").HarExporter;
 });
 
 XPCOMUtils.defineLazyGetter(this, "NetworkHelper", function() {
-  return devtools.require("devtools/toolkit/webconsole/network-helper");
+  return require("devtools/toolkit/webconsole/network-helper");
 });
 
 const HTML_NS = "http://www.w3.org/1999/xhtml";
 const EPSILON = 0.001;
 const SOURCE_SYNTAX_HIGHLIGHT_MAX_FILE_SIZE = 102400; // 100 KB in bytes
 const RESIZE_REFRESH_RATE = 50; // ms
 const REQUESTS_REFRESH_RATE = 50; // ms
 const REQUESTS_HEADERS_SAFE_BOUNDS = 30; // px
--- a/browser/devtools/netmonitor/test/head.js
+++ b/browser/devtools/netmonitor/test/head.js
@@ -3,22 +3,22 @@
 "use strict";
 
 const { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;
 
 let { Services } = Cu.import("resource://gre/modules/Services.jsm", {});
 let { Task } = Cu.import("resource://gre/modules/Task.jsm", {});
 let { Promise: promise } = Cu.import("resource://gre/modules/Promise.jsm", {});
 let { gDevTools } = Cu.import("resource:///modules/devtools/gDevTools.jsm", {});
-let { devtools } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
+let { require } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 let { CurlUtils } = Cu.import("resource:///modules/devtools/Curl.jsm", {});
-let NetworkHelper = devtools.require("devtools/toolkit/webconsole/network-helper");
-let DevToolsUtils = devtools.require("devtools/toolkit/DevToolsUtils");
-let TargetFactory = devtools.TargetFactory;
-let Toolbox = devtools.Toolbox;
+let NetworkHelper = require("devtools/toolkit/webconsole/network-helper");
+let DevToolsUtils = require("devtools/toolkit/DevToolsUtils");
+let { TargetFactory } = require("devtools/framework/target");
+let { Toolbox } = require("devtools/framework/toolbox");
 
 const EXAMPLE_URL = "http://example.com/browser/browser/devtools/netmonitor/test/";
 
 const API_CALLS_URL = EXAMPLE_URL + "html_api-calls-test-page.html";
 const SIMPLE_URL = EXAMPLE_URL + "html_simple-test-page.html";
 const NAVIGATE_URL = EXAMPLE_URL + "html_navigate-test-page.html";
 const CONTENT_TYPE_URL = EXAMPLE_URL + "html_content-type-test-page.html";
 const CONTENT_TYPE_WITHOUT_CACHE_URL = EXAMPLE_URL + "html_content-type-without-cache-test-page.html";
--- a/browser/devtools/performance/performance-controller.js
+++ b/browser/devtools/performance/performance-controller.js
@@ -1,16 +1,15 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 "use strict";
 
 const { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;
-const { devtools: loader } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
-const require = loader.require;
+const { devtools: loader, require } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 
 const { Task } = require("resource://gre/modules/Task.jsm");
 const { Heritage, ViewHelpers, WidgetMethods } = require("resource:///modules/devtools/ViewHelpers.jsm");
 
 loader.lazyRequireGetter(this, "Services");
 loader.lazyRequireGetter(this, "promise");
 loader.lazyRequireGetter(this, "EventEmitter",
   "devtools/toolkit/event-emitter");
--- a/browser/devtools/performance/test/browser_perf-allocations-to-samples.js
+++ b/browser/devtools/performance/test/browser_perf-allocations-to-samples.js
@@ -3,17 +3,17 @@
 
 /**
  * Tests if allocations data received from the memory actor is properly
  * converted to something that follows the same structure as the samples data
  * received from the profiler.
  */
 
 function test() {
-  let RecordingUtils = devtools.require("devtools/performance/recording-utils");
+  let RecordingUtils = require("devtools/performance/recording-utils");
 
   let output = RecordingUtils.getProfileThreadFromAllocations(TEST_DATA);
   is(output.toSource(), EXPECTED_OUTPUT.toSource(), "The output is correct.");
 
   finish();
 }
 
 let TEST_DATA = {
--- a/browser/devtools/performance/test/browser_perf-console-record-01.js
+++ b/browser/devtools/performance/test/browser_perf-console-record-01.js
@@ -1,17 +1,17 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 /**
  * Tests if the profiler is populated by console recordings that have finished
  * before it was opened.
  */
 
-let { getPerformanceFront } = devtools.require("devtools/performance/front");
+let { getPerformanceFront } = require("devtools/performance/front");
 let WAIT_TIME = 10;
 
 function* spawnTest() {
   let profilerConnected = waitForProfilerConnection();
   let { target, toolbox, console } = yield initConsole(SIMPLE_URL);
   yield profilerConnected;
   let front = getPerformanceFront(target);
 
--- a/browser/devtools/performance/test/browser_perf-console-record-02.js
+++ b/browser/devtools/performance/test/browser_perf-console-record-02.js
@@ -1,17 +1,17 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 /**
  * Tests if the profiler is populated by in-progress console recordings
  * when it is opened.
  */
 
-let { getPerformanceFront } = devtools.require("devtools/performance/front");
+let { getPerformanceFront } = require("devtools/performance/front");
 let WAIT_TIME = 10;
 
 function* spawnTest() {
   let profilerConnected = waitForProfilerConnection();
   let { target, toolbox, console } = yield initConsole(SIMPLE_URL);
   yield profilerConnected;
   let front = getPerformanceFront(target);
 
--- a/browser/devtools/performance/test/browser_perf-console-record-03.js
+++ b/browser/devtools/performance/test/browser_perf-console-record-03.js
@@ -1,17 +1,17 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 /**
  * Tests if the profiler is populated by in-progress console recordings, and
  * also console recordings that have finished before it was opened.
  */
 
-let { getPerformanceFront } = devtools.require("devtools/performance/front");
+let { getPerformanceFront } = require("devtools/performance/front");
 let WAIT_TIME = 10;
 
 function* spawnTest() {
   let profilerConnected = waitForProfilerConnection();
   let { target, toolbox, console } = yield initConsole(SIMPLE_URL);
   yield profilerConnected;
   let front = getPerformanceFront(target);
 
--- a/browser/devtools/performance/test/browser_perf-events-calltree.js
+++ b/browser/devtools/performance/test/browser_perf-events-calltree.js
@@ -1,16 +1,16 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 /**
  * Tests that the call tree up/down events work for js calltree and memory calltree.
  */
-const { ThreadNode } = devtools.require("devtools/performance/tree-model");
-const RecordingUtils = devtools.require("devtools/performance/recording-utils")
+const { ThreadNode } = require("devtools/performance/tree-model");
+const RecordingUtils = require("devtools/performance/recording-utils")
 
 function* spawnTest() {
   let focus = 0;
   let focusEvent = () => focus++;
 
   Services.prefs.setBoolPref(MEMORY_PREF, true);
 
   let { panel } = yield initPerformance(SIMPLE_URL);
--- a/browser/devtools/performance/test/browser_perf-highlighted.js
+++ b/browser/devtools/performance/test/browser_perf-highlighted.js
@@ -1,17 +1,17 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 /**
  * Tests that the toolbox tab for performance is highlighted when recording,
  * whether already loaded, or via console.profile with an unloaded performance tools.
  */
 
-let { getPerformanceFront } = devtools.require("devtools/performance/front");
+let { getPerformanceFront } = require("devtools/performance/front");
 
 function* spawnTest() {
   let profilerConnected = waitForProfilerConnection();
   let { target, toolbox, console } = yield initConsole(SIMPLE_URL);
   yield profilerConnected;
   let front = getPerformanceFront(target);
   let tab = toolbox.doc.getElementById("toolbox-tab-performance");
 
--- a/browser/devtools/performance/test/browser_perf-jit-view-01.js
+++ b/browser/devtools/performance/test/browser_perf-jit-view-01.js
@@ -1,17 +1,17 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 /**
  * Tests that the JIT Optimizations view renders optimization data
  * if on, and displays selected frames on focus.
  */
 
-const RecordingUtils = devtools.require("devtools/performance/recording-utils");
+const RecordingUtils = require("devtools/performance/recording-utils");
 
 Services.prefs.setBoolPref(INVERT_PREF, false);
 
 function* spawnTest() {
   let { panel } = yield initPerformance(SIMPLE_URL);
   let { EVENTS, $, $$, window, PerformanceController } = panel.panelWin;
   let { OverviewView, DetailsView, JITOptimizationsView, JsCallTreeView, RecordingsView } = panel.panelWin;
 
--- a/browser/devtools/performance/test/browser_perf-jit-view-02.js
+++ b/browser/devtools/performance/test/browser_perf-jit-view-02.js
@@ -1,18 +1,18 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 /**
  * Tests that the JIT Optimizations view does not display information
  * for meta nodes when viewing "content only".
  */
 
-const { CATEGORY_MASK } = devtools.require("devtools/performance/global");
-const RecordingUtils = devtools.require("devtools/performance/recording-utils");
+const { CATEGORY_MASK } = require("devtools/performance/global");
+const RecordingUtils = require("devtools/performance/recording-utils");
 
 Services.prefs.setBoolPref(INVERT_PREF, false);
 Services.prefs.setBoolPref(PLATFORM_DATA_PREF, false);
 
 function* spawnTest() {
   let { panel } = yield initPerformance(SIMPLE_URL);
   let { EVENTS, $, $$, window, PerformanceController } = panel.panelWin;
   let { OverviewView, DetailsView, JITOptimizationsView, JsCallTreeView, RecordingsView } = panel.panelWin;
--- a/browser/devtools/performance/test/browser_perf-theme-toggle-01.js
+++ b/browser/devtools/performance/test/browser_perf-theme-toggle-01.js
@@ -1,17 +1,17 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 /**
  * Tests if the markers and memory overviews render with the correct
  * theme on load, and rerenders when changed.
  */
 
-const { setTheme } = devtools.require("devtools/shared/theme");
+const { setTheme } = require("devtools/shared/theme");
 
 const LIGHT_BG = "#fcfcfc";
 const DARK_BG = "#14171a";
 
 setTheme("dark");
 Services.prefs.setBoolPref(MEMORY_PREF, false);
 
 function* spawnTest() {
--- a/browser/devtools/performance/test/browser_perf_recordings-io-04.js
+++ b/browser/devtools/performance/test/browser_perf_recordings-io-04.js
@@ -1,16 +1,16 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 /**
  * Tests if the performance tool can import profiler data from the
  * original profiler tool (Performance Recording v1, and Profiler data v2) and the correct views and graphs are loaded.
  */
-let RecordingUtils = devtools.require("devtools/performance/recording-utils");
+let RecordingUtils = require("devtools/performance/recording-utils");
 
 let TICKS_DATA = (function () {
   let ticks = [];
   for (let i = 0; i < 100; i++) {
     ticks.push(i * 10);
   }
   return ticks;
 })();
--- a/browser/devtools/performance/test/browser_perf_recordings-io-06.js
+++ b/browser/devtools/performance/test/browser_perf_recordings-io-06.js
@@ -1,17 +1,17 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 /**
  * Tests if the performance tool can import profiler data when Profiler is v2
  * and requires deflating, and has an extra thread that's a string. Not sure
  * what causes this.
  */
-let RecordingUtils = devtools.require("devtools/performance/recording-utils");
+let RecordingUtils = require("devtools/performance/recording-utils");
 
 let STRINGED_THREAD = (function () {
   let thread = {};
 
   thread.libs = [{
     start: 123,
     end: 456,
     offset: 0,
--- a/browser/devtools/performance/test/browser_profiler_tree-view-01.js
+++ b/browser/devtools/performance/test/browser_profiler_tree-view-01.js
@@ -2,18 +2,18 @@
    http://foo/bar/creativecommons.org/publicdomain/zero/1.0/ */
 
 /**
  * Tests if the profiler's tree view implementation works properly and
  * creates the correct column structure.
  */
 
 function test() {
-  let { ThreadNode } = devtools.require("devtools/performance/tree-model");
-  let { CallView } = devtools.require("devtools/performance/tree-view");
+  let { ThreadNode } = require("devtools/performance/tree-model");
+  let { CallView } = require("devtools/performance/tree-view");
 
   let threadNode = new ThreadNode(gThread, { startTime: 0, endTime: 20 });
   // Don't display the synthesized (root) and the real (root) node twice.
   threadNode.calls = threadNode.calls[0].calls;
   let treeRoot = new CallView({ frame: threadNode });
 
   let container = document.createElement("vbox");
   treeRoot.autoExpandDepth = 0;
--- a/browser/devtools/performance/test/browser_profiler_tree-view-02.js
+++ b/browser/devtools/performance/test/browser_profiler_tree-view-02.js
@@ -1,21 +1,21 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 /**
  * Tests if the profiler's tree view implementation works properly and
  * creates the correct column structure after expanding some of the nodes.
  */
 
-let { CATEGORY_MASK } = devtools.require("devtools/performance/global");
+let { CATEGORY_MASK } = require("devtools/performance/global");
 
 function test() {
-  let { ThreadNode } = devtools.require("devtools/performance/tree-model");
-  let { CallView } = devtools.require("devtools/performance/tree-view");
+  let { ThreadNode } = require("devtools/performance/tree-model");
+  let { CallView } = require("devtools/performance/tree-view");
 
   let threadNode = new ThreadNode(gThread, { startTime: 0, endTime: 20 });
   // Don't display the synthesized (root) and the real (root) node twice.
   threadNode.calls = threadNode.calls[0].calls;
   let treeRoot = new CallView({ frame: threadNode });
 
   let container = document.createElement("vbox");
   treeRoot.autoExpandDepth = 0;
--- a/browser/devtools/performance/test/browser_profiler_tree-view-03.js
+++ b/browser/devtools/performance/test/browser_profiler_tree-view-03.js
@@ -2,18 +2,18 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 /**
  * Tests if the profiler's tree view implementation works properly and
  * creates the correct column structure and can auto-expand all nodes.
  */
 
 function test() {
-  let { ThreadNode } = devtools.require("devtools/performance/tree-model");
-  let { CallView } = devtools.require("devtools/performance/tree-view");
+  let { ThreadNode } = require("devtools/performance/tree-model");
+  let { CallView } = require("devtools/performance/tree-view");
 
   let threadNode = new ThreadNode(gThread, { startTime: 0, endTime: 20 });
   // Don't display the synthesized (root) and the real (root) node twice.
   threadNode.calls = threadNode.calls[0].calls;
   let treeRoot = new CallView({ frame: threadNode });
 
   let container = document.createElement("vbox");
   treeRoot.attachTo(container);
--- a/browser/devtools/performance/test/browser_profiler_tree-view-04.js
+++ b/browser/devtools/performance/test/browser_profiler_tree-view-04.js
@@ -1,21 +1,21 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 /**
  * Tests if the profiler's tree view implementation works properly and
  * creates the correct DOM nodes in the correct order.
  */
 
-let { CATEGORY_MASK } = devtools.require("devtools/performance/global");
+let { CATEGORY_MASK } = require("devtools/performance/global");
 
 function test() {
-  let { ThreadNode } = devtools.require("devtools/performance/tree-model");
-  let { CallView } = devtools.require("devtools/performance/tree-view");
+  let { ThreadNode } = require("devtools/performance/tree-model");
+  let { CallView } = require("devtools/performance/tree-view");
 
   let threadNode = new ThreadNode(gThread, { startTime: 0, endTime: 20 });
   // Don't display the synthesized (root) and the real (root) node twice.
   threadNode.calls = threadNode.calls[0].calls;
   let treeRoot = new CallView({ frame: threadNode });
 
   let container = document.createElement("vbox");
   treeRoot.attachTo(container);
--- a/browser/devtools/performance/test/browser_profiler_tree-view-05.js
+++ b/browser/devtools/performance/test/browser_profiler_tree-view-05.js
@@ -2,18 +2,18 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 /**
  * Tests if the profiler's tree view implementation works properly and
  * can toggle categories hidden or visible.
  */
 
 function test() {
-  let { ThreadNode } = devtools.require("devtools/performance/tree-model");
-  let { CallView } = devtools.require("devtools/performance/tree-view");
+  let { ThreadNode } = require("devtools/performance/tree-model");
+  let { CallView } = require("devtools/performance/tree-view");
 
   let threadNode = new ThreadNode(gThread, { startTime: 0, endTime: 20 });
   // Don't display the synthesized (root) and the real (root) node twice.
   threadNode.calls = threadNode.calls[0].calls;
   let treeRoot = new CallView({ frame: threadNode });
 
   let container = document.createElement("vbox");
   treeRoot.attachTo(container);
--- a/browser/devtools/performance/test/browser_profiler_tree-view-06.js
+++ b/browser/devtools/performance/test/browser_profiler_tree-view-06.js
@@ -2,18 +2,18 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 /**
  * Tests if the profiler's tree view implementation works properly and
  * correctly emits events when certain DOM nodes are clicked.
  */
 
 function* spawnTest() {
-  let { ThreadNode } = devtools.require("devtools/performance/tree-model");
-  let { CallView } = devtools.require("devtools/performance/tree-view");
+  let { ThreadNode } = require("devtools/performance/tree-model");
+  let { CallView } = require("devtools/performance/tree-view");
 
   let threadNode = new ThreadNode(gThread, { startTime: 0, endTime: 20 });
   // Don't display the synthesized (root) and the real (root) node twice.
   threadNode.calls = threadNode.calls[0].calls;
   let treeRoot = new CallView({ frame: threadNode });
 
   let container = document.createElement("vbox");
   treeRoot.attachTo(container);
--- a/browser/devtools/performance/test/browser_profiler_tree-view-07.js
+++ b/browser/devtools/performance/test/browser_profiler_tree-view-07.js
@@ -2,18 +2,18 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 /**
  * Tests if the profiler's tree view implementation works properly and
  * has the correct 'root', 'parent', 'level' etc. accessors on child nodes.
  */
 
 function* spawnTest() {
-  let { ThreadNode } = devtools.require("devtools/performance/tree-model");
-  let { CallView } = devtools.require("devtools/performance/tree-view");
+  let { ThreadNode } = require("devtools/performance/tree-model");
+  let { CallView } = require("devtools/performance/tree-view");
 
   let threadNode = new ThreadNode(gThread, { startTime: 0, endTime: 20 });
   // Don't display the synthesized (root) and the real (root) node twice.
   threadNode.calls = threadNode.calls[0].calls;
   let treeRoot = new CallView({ frame: threadNode });
 
   let container = document.createElement("vbox");
   container.id = "call-tree-container";
--- a/browser/devtools/performance/test/browser_profiler_tree-view-08.js
+++ b/browser/devtools/performance/test/browser_profiler_tree-view-08.js
@@ -1,21 +1,21 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 /**
  * Tests that the profiler's tree view renders generalized platform data
  * when `contentOnly` is on correctly.
  */
 
-let { CATEGORY_MASK } = devtools.require("devtools/performance/global");
+let { CATEGORY_MASK } = require("devtools/performance/global");
 
 function test() {
-  let { ThreadNode } = devtools.require("devtools/performance/tree-model");
-  let { CallView } = devtools.require("devtools/performance/tree-view");
+  let { ThreadNode } = require("devtools/performance/tree-model");
+  let { CallView } = require("devtools/performance/tree-view");
 
   /*
    * should have a tree like:
    * root
    *   - A
    *     - B
    *       - C
    *       - D
--- a/browser/devtools/performance/test/browser_profiler_tree-view-09.js
+++ b/browser/devtools/performance/test/browser_profiler_tree-view-09.js
@@ -1,21 +1,21 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 /**
  * Tests that the profiler's tree view sorts inverted call trees by
  * "self cost" and not "total cost".
  */
 
-let { CATEGORY_MASK } = devtools.require("devtools/performance/global");
+let { CATEGORY_MASK } = require("devtools/performance/global");
 
 let test = Task.async(function*() {
-  let { ThreadNode } = devtools.require("devtools/performance/tree-model");
-  let { CallView } = devtools.require("devtools/performance/tree-view");
+  let { ThreadNode } = require("devtools/performance/tree-model");
+  let { CallView } = require("devtools/performance/tree-view");
 
   let threadNode = new ThreadNode(gSamples, { invertTree: true, startTime: 0, endTime: 10 });
   let treeRoot = new CallView({ frame: threadNode, inverted: true, autoExpandDepth: 1 });
 
   let container = document.createElement("vbox");
   treeRoot.attachTo(container);
 
   is(treeRoot.getChild(0).frame.location, "B",
--- a/browser/devtools/performance/test/browser_profiler_tree-view-10.js
+++ b/browser/devtools/performance/test/browser_profiler_tree-view-10.js
@@ -2,18 +2,18 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 /**
  * Tests if the profiler's tree view, when inverted, displays the self and
  * total costs correctly.
  */
 
 function test() {
-  let { ThreadNode } = devtools.require("devtools/performance/tree-model");
-  let { CallView } = devtools.require("devtools/performance/tree-view");
+  let { ThreadNode } = require("devtools/performance/tree-model");
+  let { CallView } = require("devtools/performance/tree-view");
 
   let threadNode = new ThreadNode(gThread, { invertTree: true, startTime: 0, endTime: 50 });
   let treeRoot = new CallView({ frame: threadNode, inverted: true, hidden: true });
 
   let container = document.createElement("vbox");
   treeRoot.attachTo(container);
 
   // Add 1 to each index to skip the hidden root node
--- a/browser/devtools/performance/test/browser_profiler_tree-view-11.js
+++ b/browser/devtools/performance/test/browser_profiler_tree-view-11.js
@@ -1,18 +1,18 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 /**
  * Tests that if a recording set `withJITOptimizations` on, then an
  * icon is next to the frame with optimizations
  */
 
-const RecordingUtils = devtools.require("devtools/performance/recording-utils");
-const { CATEGORY_MASK } = devtools.require("devtools/performance/global");
+const RecordingUtils = require("devtools/performance/recording-utils");
+const { CATEGORY_MASK } = require("devtools/performance/global");
 
 function* spawnTest() {
   let { panel } = yield initPerformance(SIMPLE_URL);
   let { EVENTS, $, $$, window, PerformanceController } = panel.panelWin;
   let { OverviewView, DetailsView, JITOptimizationsView, JsCallTreeView, RecordingsView } = panel.panelWin;
 
   let profilerData = { threads: [gThread] };
 
--- a/browser/devtools/performance/test/browser_timeline-filters-01.js
+++ b/browser/devtools/performance/test/browser_timeline-filters-01.js
@@ -5,17 +5,17 @@
  * Tests markers filtering mechanism.
  */
 
 const EPSILON = 0.00000001;
 
 function* spawnTest() {
   let { panel } = yield initPerformance(SIMPLE_URL);
   let { $, $$, EVENTS, PerformanceController, OverviewView, WaterfallView } = panel.panelWin;
-  let { TimelineGraph } = devtools.require("devtools/performance/graphs");
+  let { TimelineGraph } = require("devtools/performance/graphs");
   let { rowHeight: MARKERS_GRAPH_ROW_HEIGHT } = TimelineGraph.prototype;
 
   yield startRecording(panel);
   ok(true, "Recording has started.");
 
   yield waitUntil(() => {
     // Wait until we get 3 different markers.
     let markers = PerformanceController.getCurrentRecording().getMarkers();
--- a/browser/devtools/performance/test/browser_timeline-waterfall-background.js
+++ b/browser/devtools/performance/test/browser_timeline-waterfall-background.js
@@ -4,17 +4,17 @@
 /**
  * Tests if the waterfall background is a 1px high canvas stretching across
  * the container bounds.
  */
 
 function* spawnTest() {
   let { target, panel } = yield initPerformance(SIMPLE_URL);
   let { $, EVENTS, PerformanceController, OverviewView, DetailsView, WaterfallView } = panel.panelWin;
-  let { WATERFALL_MARKER_SIDEBAR_SAFE_BOUNDS } = devtools.require("devtools/performance/marker-view");
+  let { WATERFALL_MARKER_SIDEBAR_SAFE_BOUNDS } = require("devtools/performance/marker-view");
 
   yield startRecording(panel);
   ok(true, "Recording has started.");
 
   let updated = 0;
   OverviewView.on(EVENTS.OVERVIEW_RENDERED, () => updated++);
 
   ok((yield waitUntil(() => updated > 0)),
--- a/browser/devtools/performance/test/browser_timeline-waterfall-generic.js
+++ b/browser/devtools/performance/test/browser_timeline-waterfall-generic.js
@@ -3,17 +3,17 @@
 
 /**
  * Tests if the waterfall is properly built after finishing a recording.
  */
 
 function* spawnTest() {
   let { target, panel } = yield initPerformance(SIMPLE_URL);
   let { $, $$, EVENTS, PerformanceController, OverviewView, WaterfallView, DetailsView } = panel.panelWin;
-  let { WATERFALL_MARKER_SIDEBAR_SAFE_BOUNDS } = devtools.require("devtools/performance/marker-view");
+  let { WATERFALL_MARKER_SIDEBAR_SAFE_BOUNDS } = require("devtools/performance/marker-view");
 
   yield startRecording(panel);
   ok(true, "Recording has started.");
 
   let updated = 0;
   OverviewView.on(EVENTS.OVERVIEW_RENDERED, () => updated++);
 
   ok((yield waitUntil(() => updated > 0)),
--- a/browser/devtools/performance/test/browser_timeline-waterfall-sidebar.js
+++ b/browser/devtools/performance/test/browser_timeline-waterfall-sidebar.js
@@ -3,18 +3,18 @@
 
 /**
  * Tests if the sidebar is properly updated when a marker is selected.
  */
 
 function* spawnTest() {
   let { target, panel } = yield initPerformance(SIMPLE_URL);
   let { $, $$, PerformanceController, WaterfallView } = panel.panelWin;
-  let { L10N } = devtools.require("devtools/performance/global");
-  let { getMarkerLabel } = devtools.require("devtools/performance/marker-utils");
+  let { L10N } = require("devtools/performance/global");
+  let { getMarkerLabel } = require("devtools/performance/marker-utils");
 
   // Hijack the markers massaging part of creating the waterfall view,
   // to prevent collapsing markers and allowing this test to verify
   // everything individually. A better solution would be to just expand
   // all markers first and then skip the meta nodes, but I'm lazy.
   WaterfallView._prepareWaterfallTree = markers => {
     return { submarkers: markers };
   };
--- a/browser/devtools/performance/test/head.js
+++ b/browser/devtools/performance/test/head.js
@@ -3,25 +3,25 @@
 "use strict";
 
 const { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;
 
 let { Services } = Cu.import("resource://gre/modules/Services.jsm", {});
 let { Preferences } = Cu.import("resource://gre/modules/Preferences.jsm", {});
 let { Task } = Cu.import("resource://gre/modules/Task.jsm", {});
 let { Promise } = Cu.import("resource://gre/modules/Promise.jsm", {});
-let { devtools } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
+let { require } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
+let { TargetFactory } = require("devtools/framework/target");
 let { gDevTools } = Cu.import("resource:///modules/devtools/gDevTools.jsm", {});
-const DevToolsUtils = devtools.require("devtools/toolkit/DevToolsUtils");
+const DevToolsUtils = require("devtools/toolkit/DevToolsUtils");
 let { DebuggerServer } = Cu.import("resource://gre/modules/devtools/dbg-server.jsm", {});
-let { console } = devtools.require("resource://gre/modules/devtools/Console.jsm");
-let { merge } = devtools.require("sdk/util/object");
+let { console } = require("resource://gre/modules/devtools/Console.jsm");
+let { merge } = require("sdk/util/object");
 let { generateUUID } = Cc["@mozilla.org/uuid-generator;1"].getService(Ci.nsIUUIDGenerator);
-let { getPerformanceFront, PerformanceFront } = devtools.require("devtools/performance/front");
-let TargetFactory = devtools.TargetFactory;
+let { getPerformanceFront, PerformanceFront } = require("devtools/performance/front");
 
 let mm = null;
 
 const FRAME_SCRIPT_UTILS_URL = "chrome://browser/content/devtools/frame-script-utils.js"
 const EXAMPLE_URL = "http://example.com/browser/browser/devtools/performance/test/";
 const SIMPLE_URL = EXAMPLE_URL + "doc_simple-test.html";
 const MARKERS_URL = EXAMPLE_URL + "doc_markers.html";
 const ALLOCS_URL = EXAMPLE_URL + "doc_allocs.html";
@@ -541,17 +541,17 @@ function getInflatedStackLocations(threa
   // The profiler tree is inverted, so reverse the array.
   return locations.reverse();
 }
 
 /**
  * Synthesize a profile for testing.
  */
 function synthesizeProfileForTest(samples) {
-  const RecordingUtils = devtools.require("devtools/performance/recording-utils");
+  const RecordingUtils = require("devtools/performance/recording-utils");
 
   samples.unshift({
     time: 0,
     frames: [
       { location: "(root)" }
     ]
   });
 
--- a/browser/devtools/performance/test/unit/head.js
+++ b/browser/devtools/performance/test/unit/head.js
@@ -1,18 +1,18 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 "use strict";
 
 const { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;
 
-let { devtools } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
+let { require } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 let { Services } = Cu.import("resource://gre/modules/Services.jsm", {});
-let { console } = devtools.require("resource://gre/modules/devtools/Console.jsm");
-const RecordingUtils = devtools.require("devtools/performance/recording-utils");
+let { console } = require("resource://gre/modules/devtools/Console.jsm");
+const RecordingUtils = require("devtools/performance/recording-utils");
 
 const PLATFORM_DATA_PREF = "devtools.performance.ui.show-platform-data";
 
 /**
  * Get a path in a FrameNode call tree.
  */
 function getFrameNodePath(root, path) {
   let calls = root.calls;
--- a/browser/devtools/performance/test/unit/test_frame-utils-01.js
+++ b/browser/devtools/performance/test/unit/test_frame-utils-01.js
@@ -35,17 +35,17 @@ const CHROME_LOCATIONS = [
   "EnterJIT",
 ].map(argify);
 
 function run_test() {
   run_next_test();
 }
 
 add_task(function () {
-  const { computeIsContentAndCategory, parseLocation } = devtools.require("devtools/performance/frame-utils");
+  const { computeIsContentAndCategory, parseLocation } = require("devtools/performance/frame-utils");
   let isContent = (frame) => {
     computeIsContentAndCategory(frame);
     return frame.isContent;
   };
 
 
   for (let frame of CONTENT_LOCATIONS) {
     ok(isContent.apply(null, frameify(frame)), `${frame[0]} should be considered a content frame.`);
--- a/browser/devtools/performance/test/unit/test_frame-utils-02.js
+++ b/browser/devtools/performance/test/unit/test_frame-utils-02.js
@@ -6,17 +6,17 @@
  * works properly.
  */
 
 function run_test() {
   run_next_test();
 }
 
 add_task(function () {
-  let FrameUtils = devtools.require("devtools/performance/frame-utils");
+  let FrameUtils = require("devtools/performance/frame-utils");
 
   let isContent = (frame) => {
     FrameUtils.computeIsContentAndCategory(frame);
     return frame.isContent;
   };
 
   ok(isContent({ location: "http://foo" }),
     "Verifying content/chrome frames is working properly.");
--- a/browser/devtools/performance/test/unit/test_jit-graph-data.js
+++ b/browser/devtools/performance/test/unit/test_jit-graph-data.js
@@ -14,18 +14,18 @@ const RESOLUTION = 50;
 const TIME_PER_SAMPLE = 5;
 
 // Offset needed since ThreadNode requires the first sample to be strictly
 // greater than its start time. This lets us still have pretty numbers
 // in this test to keep it (more) simple, which it sorely needs.
 const TIME_OFFSET = 5;
 
 add_task(function test() {
-  let { ThreadNode } = devtools.require("devtools/performance/tree-model");
-  let { createTierGraphDataFromFrameNode } = devtools.require("devtools/performance/jit");
+  let { ThreadNode } = require("devtools/performance/tree-model");
+  let { createTierGraphDataFromFrameNode } = require("devtools/performance/jit");
 
   // Select the second half of the set of samples
   let startTime = (SAMPLE_COUNT / 2 * TIME_PER_SAMPLE) - TIME_OFFSET;
   let endTime = (SAMPLE_COUNT * TIME_PER_SAMPLE) - TIME_OFFSET;
   let invertTree = true;
 
   let root = new ThreadNode(gThread, { invertTree, startTime, endTime });
 
--- a/browser/devtools/performance/test/unit/test_jit-model-01.js
+++ b/browser/devtools/performance/test/unit/test_jit-model-01.js
@@ -7,17 +7,17 @@
  * FrameNode, and the returning of that data is as expected.
  */
 
 function run_test() {
   run_next_test();
 }
 
 add_task(function test() {
-  let { JITOptimizations } = devtools.require("devtools/performance/jit");
+  let { JITOptimizations } = require("devtools/performance/jit");
 
   let rawSites = [];
   rawSites.push(gRawSite2);
   rawSites.push(gRawSite2);
   rawSites.push(gRawSite1);
   rawSites.push(gRawSite1);
   rawSites.push(gRawSite2);
   rawSites.push(gRawSite3);
--- a/browser/devtools/performance/test/unit/test_jit-model-02.js
+++ b/browser/devtools/performance/test/unit/test_jit-model-02.js
@@ -6,17 +6,17 @@
  * OptimizationSites methods work as expected.
  */
 
 function run_test() {
   run_next_test();
 }
 
 add_task(function test() {
-  let { JITOptimizations, OptimizationSite } = devtools.require("devtools/performance/jit");
+  let { JITOptimizations, OptimizationSite } = require("devtools/performance/jit");
 
   let rawSites = [];
   rawSites.push(gRawSite2);
   rawSites.push(gRawSite2);
   rawSites.push(gRawSite1);
   rawSites.push(gRawSite1);
   rawSites.push(gRawSite2);
   rawSites.push(gRawSite3);
--- a/browser/devtools/performance/test/unit/test_marker-blueprint.js
+++ b/browser/devtools/performance/test/unit/test_marker-blueprint.js
@@ -5,17 +5,17 @@
  * Tests if the timeline blueprint has a correct structure.
  */
 
 function run_test() {
   run_next_test();
 }
 
 add_task(function () {
-  let { TIMELINE_BLUEPRINT } = devtools.require("devtools/performance/markers");
+  let { TIMELINE_BLUEPRINT } = require("devtools/performance/markers");
 
   ok(TIMELINE_BLUEPRINT,
     "A timeline blueprint should be available.");
 
   ok(Object.keys(TIMELINE_BLUEPRINT).length,
     "The timeline blueprint has at least one entry.");
 
   for (let [key, value] of Iterator(TIMELINE_BLUEPRINT)) {
--- a/browser/devtools/performance/test/unit/test_marker-utils.js
+++ b/browser/devtools/performance/test/unit/test_marker-utils.js
@@ -5,18 +5,18 @@
  * Tests the marker utils methods.
  */
 
 function run_test() {
   run_next_test();
 }
 
 add_task(function () {
-  let { TIMELINE_BLUEPRINT } = devtools.require("devtools/performance/markers");
-  let Utils = devtools.require("devtools/performance/marker-utils");
+  let { TIMELINE_BLUEPRINT } = require("devtools/performance/markers");
+  let Utils = require("devtools/performance/marker-utils");
 
   Services.prefs.setBoolPref(PLATFORM_DATA_PREF, false);
 
   equal(Utils.getMarkerLabel({ name: "DOMEvent" }), "DOM Event",
     "getMarkerLabel() returns a simple label");
   equal(Utils.getMarkerLabel({ name: "Javascript", causeName: "setTimeout handler" }), "setTimeout",
     "getMarkerLabel() returns a label defined via function");
 
--- a/browser/devtools/performance/test/unit/test_profiler-categories.js
+++ b/browser/devtools/performance/test/unit/test_profiler-categories.js
@@ -5,17 +5,17 @@
  * Tests if the profiler categories are mapped correctly.
  */
 
 function run_test() {
   run_next_test();
 }
 
 add_task(function () {
-  let global = devtools.require("devtools/performance/global");
+  let global = require("devtools/performance/global");
   let l10n = global.L10N;
   let categories = global.CATEGORIES;
   let mappings = global.CATEGORY_MAPPINGS;
   let count = categories.length;
 
   ok(count,
     "Should have a non-empty list of categories available.");
 
--- a/browser/devtools/performance/test/unit/test_tree-model-01.js
+++ b/browser/devtools/performance/test/unit/test_tree-model-01.js
@@ -5,17 +5,17 @@
  * Tests if a call tree model can be correctly computed from a samples array.
  */
 
 function run_test() {
   run_next_test();
 }
 
 add_task(function test() {
-  const { ThreadNode } = devtools.require("devtools/performance/tree-model");
+  const { ThreadNode } = require("devtools/performance/tree-model");
 
   // Create a root node from a given samples array.
 
   let threadNode = new ThreadNode(gThread, { startTime: 0, endTime: 20 });
   let root = getFrameNodePath(threadNode, "(root)");
 
   // Test the root node.
 
--- a/browser/devtools/performance/test/unit/test_tree-model-02.js
+++ b/browser/devtools/performance/test/unit/test_tree-model-02.js
@@ -5,17 +5,17 @@
  * Tests if a call tree model ignores samples with no timing information.
  */
 
 function run_test() {
   run_next_test();
 }
 
 add_task(function test() {
-  let { ThreadNode } = devtools.require("devtools/performance/tree-model");
+  let { ThreadNode } = require("devtools/performance/tree-model");
 
   // Create a root node from a given samples array.
 
   let thread = new ThreadNode(gThread, { startTime: 0, endTime: 10 });
   let root = getFrameNodePath(thread, "(root)");
 
   // Test the ThreadNode, only node with a duration.
   equal(thread.duration, 10,
--- a/browser/devtools/performance/test/unit/test_tree-model-03.js
+++ b/browser/devtools/performance/test/unit/test_tree-model-03.js
@@ -6,17 +6,17 @@
  * while at the same time filtering by duration.
  */
 
 function run_test() {
   run_next_test();
 }
 
 add_task(function test() {
-  let { ThreadNode } = devtools.require("devtools/performance/tree-model");
+  let { ThreadNode } = require("devtools/performance/tree-model");
 
   // Create a root node from a given samples array, filtering by time.
   //
   // Filtering from 5 to 18 includes the 2nd and 3rd samples. The 2nd sample
   // starts exactly on 5 and ends at 11. The 3rd sample starts at 11 and ends
   // exactly at 18.
   let startTime = 5;
   let endTime = 18;
--- a/browser/devtools/performance/test/unit/test_tree-model-04.js
+++ b/browser/devtools/performance/test/unit/test_tree-model-04.js
@@ -6,17 +6,17 @@
  * while at the same time filtering by duration and content-only frames.
  */
 
 function run_test() {
   run_next_test();
 }
 
 add_task(function test() {
-  let { ThreadNode } = devtools.require("devtools/performance/tree-model");
+  let { ThreadNode } = require("devtools/performance/tree-model");
 
   // Create a root node from a given samples array, filtering by time.
 
   let startTime = 5;
   let endTime = 18;
   let thread = new ThreadNode(gThread, { startTime, endTime, contentOnly: true });
   let root = getFrameNodePath(thread, "(root)");
 
--- a/browser/devtools/performance/test/unit/test_tree-model-05.js
+++ b/browser/devtools/performance/test/unit/test_tree-model-05.js
@@ -42,17 +42,17 @@ let gThread = synthesizeProfileForTest([
   ]
 }]);
 
 function run_test() {
   run_next_test();
 }
 
 add_task(function test() {
-  let { ThreadNode } = devtools.require("devtools/performance/tree-model");
+  let { ThreadNode } = require("devtools/performance/tree-model");
 
   let root = new ThreadNode(gThread, { invertTree: true, startTime: 0, endTime: 4 });
 
   equal(root.calls.length, 2,
      "Should get the 2 youngest frames, not the 1 oldest frame");
 
   let C = getFrameNodePath(root, "C");
   ok(C, "Should have C as a child of the root.");
--- a/browser/devtools/performance/test/unit/test_tree-model-06.js
+++ b/browser/devtools/performance/test/unit/test_tree-model-06.js
@@ -7,17 +7,17 @@
  * and only youngest frames capture optimization data.
  */
 
 function run_test() {
   run_next_test();
 }
 
 add_task(function test() {
-  let { ThreadNode } = devtools.require("devtools/performance/tree-model");
+  let { ThreadNode } = require("devtools/performance/tree-model");
   let root = getFrameNodePath(new ThreadNode(gThread, { startTime: 0, endTime: 30 }), "(root)");
 
   let A = getFrameNodePath(root, "A");
   let B = getFrameNodePath(A, "B");
   let C = getFrameNodePath(B, "C");
   let Aopts = A.getOptimizations();
   let Bopts = B.getOptimizations();
   let Copts = C.getOptimizations();
--- a/browser/devtools/performance/test/unit/test_tree-model-07.js
+++ b/browser/devtools/performance/test/unit/test_tree-model-07.js
@@ -1,23 +1,23 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 /**
  * Tests that when displaying only content nodes, platform nodes are generalized.
  */
 
-let { CATEGORY_MASK } = devtools.require("devtools/performance/global");
+let { CATEGORY_MASK } = require("devtools/performance/global");
 
 function run_test() {
   run_next_test();
 }
 
 add_task(function test() {
-  let { ThreadNode } = devtools.require("devtools/performance/tree-model");
+  let { ThreadNode } = require("devtools/performance/tree-model");
   let url = (n) => `http://content/${n}`;
 
   // Create a root node from a given samples array.
 
   let root = getFrameNodePath(new ThreadNode(gThread, { startTime: 5, endTime: 30, contentOnly: true }), "(root)");
 
   /*
    * should have a tree like:
--- a/browser/devtools/performance/test/unit/test_tree-model-08.js
+++ b/browser/devtools/performance/test/unit/test_tree-model-08.js
@@ -5,19 +5,19 @@
  * Verifies if FrameNodes retain and parse their data appropriately.
  */
 
 function run_test() {
   run_next_test();
 }
 
 add_task(function test() {
-  let FrameUtils = devtools.require("devtools/performance/frame-utils");
-  let { FrameNode } = devtools.require("devtools/performance/tree-model");
-  let { CATEGORY_OTHER } = devtools.require("devtools/performance/global");
+  let FrameUtils = require("devtools/performance/frame-utils");
+  let { FrameNode } = require("devtools/performance/tree-model");
+  let { CATEGORY_OTHER } = require("devtools/performance/global");
   let compute = frame => {
     FrameUtils.computeIsContentAndCategory(frame);
     return frame;
   };
 
   let frames = [
     new FrameNode("hello/<.world (http://foo/bar.js:123:987)", compute({
       location: "hello/<.world (http://foo/bar.js:123:987)",
--- a/browser/devtools/performance/test/unit/test_tree-model-09.js
+++ b/browser/devtools/performance/test/unit/test_tree-model-09.js
@@ -1,23 +1,23 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 /**
  * Tests that when displaying only content nodes, platform nodes are generalized.
  */
 
-let { CATEGORY_MASK } = devtools.require("devtools/performance/global");
+let { CATEGORY_MASK } = require("devtools/performance/global");
 
 function run_test() {
   run_next_test();
 }
 
 add_task(function test() {
-  let { ThreadNode } = devtools.require("devtools/performance/tree-model");
+  let { ThreadNode } = require("devtools/performance/tree-model");
   let url = (n) => `http://content/${n}`;
 
   // Create a root node from a given samples array.
 
   let root = getFrameNodePath(new ThreadNode(gThread, { startTime: 5, endTime: 25, contentOnly: true }), "(root)");
 
   /*
    * should have a tree like:
--- a/browser/devtools/performance/test/unit/test_tree-model-10.js
+++ b/browser/devtools/performance/test/unit/test_tree-model-10.js
@@ -6,17 +6,17 @@
  * frame nodes. The model-only version of browser_profiler-tree-view-10.js
  */
 
 function run_test() {
   run_next_test();
 }
 
 add_task(function () {
-  let { ThreadNode } = devtools.require("devtools/performance/tree-model");
+  let { ThreadNode } = require("devtools/performance/tree-model");
   let thread = new ThreadNode(gThread, { invertTree: true, startTime: 0, endTime: 50 });
 
   /**
    * Samples
    *
    * A->C
    * A->B
    * A->B->C x4
--- a/browser/devtools/performance/test/unit/test_tree-model-11.js
+++ b/browser/devtools/performance/test/unit/test_tree-model-11.js
@@ -6,17 +6,17 @@
  * samples.
  */
 
 function run_test() {
   run_next_test();
 }
 
 add_task(function () {
-  let { ThreadNode } = devtools.require("devtools/performance/tree-model");
+  let { ThreadNode } = require("devtools/performance/tree-model");
   let thread = new ThreadNode(gThread, { startTime: 0, endTime: 50, flattenRecursion: true });
 
   /**
    * Samples
    *
    * A->B->C
    * A->B->B->B->C
    * A->B
--- a/browser/devtools/performance/test/unit/test_tree-model-12.js
+++ b/browser/devtools/performance/test/unit/test_tree-model-12.js
@@ -4,17 +4,17 @@
 // Test that uninverting the call tree works correctly when there are stacks
 // in the profile that prefixes of other stacks.
 
 function run_test() {
   run_next_test();
 }
 
 add_task(function () {
-  let { ThreadNode } = devtools.require("devtools/performance/tree-model");
+  let { ThreadNode } = require("devtools/performance/tree-model");
   let thread = new ThreadNode(gThread, { startTime: 0, endTime: 50 });
   let root = getFrameNodePath(thread, "(root)");
 
   /**
    * Samples
    *
    * A->B
    * C->B
--- a/browser/devtools/performance/test/unit/test_tree-model-13.js
+++ b/browser/devtools/performance/test/unit/test_tree-model-13.js
@@ -3,17 +3,17 @@
 
 // Like test_tree-model-12, but inverted.
 
 function run_test() {
   run_next_test();
 }
 
 add_task(function () {
-  let { ThreadNode } = devtools.require("devtools/performance/tree-model");
+  let { ThreadNode } = require("devtools/performance/tree-model");
   let root = new ThreadNode(gThread, { invertTree: true, startTime: 0, endTime: 50 });
 
   /**
    * Samples
    *
    * A->B
    * C->B
    * B
--- a/browser/devtools/performance/test/unit/test_waterfall-utils-collapse-01.js
+++ b/browser/devtools/performance/test/unit/test_waterfall-utils-collapse-01.js
@@ -5,17 +5,17 @@
  * Tests if the waterfall collapsing logic works properly.
  */
 
 function run_test() {
   run_next_test();
 }
 
 add_task(function test() {
-  const WaterfallUtils = devtools.require("devtools/performance/waterfall-utils");
+  const WaterfallUtils = require("devtools/performance/waterfall-utils");
 
   let rootMarkerNode = WaterfallUtils.createParentNode({ name: "(root)" });
 
   WaterfallUtils.collapseMarkersIntoNode({
     rootNode: rootMarkerNode,
     markersList: gTestMarkers
   });
 
--- a/browser/devtools/performance/test/unit/test_waterfall-utils-collapse-02.js
+++ b/browser/devtools/performance/test/unit/test_waterfall-utils-collapse-02.js
@@ -6,17 +6,17 @@
  * markers, as they should ignore any sort of collapsing.
  */
 
 function run_test() {
   run_next_test();
 }
 
 add_task(function test() {
-  const WaterfallUtils = devtools.require("devtools/performance/waterfall-utils");
+  const WaterfallUtils = require("devtools/performance/waterfall-utils");
 
   let rootMarkerNode = WaterfallUtils.createParentNode({ name: "(root)" });
 
   WaterfallUtils.collapseMarkersIntoNode({
     rootNode: rootMarkerNode,
     markersList: gTestMarkers
   });
 
--- a/browser/devtools/performance/test/unit/test_waterfall-utils-collapse-03.js
+++ b/browser/devtools/performance/test/unit/test_waterfall-utils-collapse-03.js
@@ -6,17 +6,17 @@
  * collapsible markers downward, and the following marker is outside of both ranges.
  */
 
 function run_test() {
   run_next_test();
 }
 
 add_task(function test() {
-  const WaterfallUtils = devtools.require("devtools/performance/waterfall-utils");
+  const WaterfallUtils = require("devtools/performance/waterfall-utils");
 
   let rootMarkerNode = WaterfallUtils.createParentNode({ name: "(root)" });
 
   WaterfallUtils.collapseMarkersIntoNode({
     rootNode: rootMarkerNode,
     markersList: gTestMarkers
   });
 
--- a/browser/devtools/performance/test/unit/test_waterfall-utils-collapse-04.js
+++ b/browser/devtools/performance/test/unit/test_waterfall-utils-collapse-04.js
@@ -6,17 +6,17 @@
  * when filtering parents and children.
  */
 
 function run_test() {
   run_next_test();
 }
 
 add_task(function test() {
-  const WaterfallUtils = devtools.require("devtools/performance/waterfall-utils");
+  const WaterfallUtils = require("devtools/performance/waterfall-utils");
 
   [
     [["DOMEvent"], gExpectedOutputNoDOMEvent],
     [["Javascript"], gExpectedOutputNoJS],
     [["DOMEvent", "Javascript"], gExpectedOutputNoDOMEventOrJS],
   ].forEach(([filter, expected]) => {
     let rootMarkerNode = WaterfallUtils.createParentNode({ name: "(root)" });
 
--- a/browser/devtools/projecteditor/chrome/content/projecteditor-loader.js
+++ b/browser/devtools/projecteditor/chrome/content/projecteditor-loader.js
@@ -1,13 +1,12 @@
 const Cu = Components.utils;
-const {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
+const {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 const {FileUtils} = Cu.import("resource://gre/modules/FileUtils.jsm", {});
 const {NetUtil} = Cu.import("resource://gre/modules/NetUtil.jsm", {});
-const require = devtools.require;
 const promise = require("projecteditor/helpers/promise");
 const ProjectEditor = require("projecteditor/projecteditor");
 
 const SAMPLE_PATH = buildTempDirectoryStructure();
 const SAMPLE_NAME = "DevTools Content Application Name";
 const SAMPLE_PROJECT_URL = "data:text/html;charset=utf-8,<body><h1>Project Overview</h1></body>";
 const SAMPLE_ICON = "chrome://browser/skin/devtools/tool-debugger.svg";
 
--- a/browser/devtools/projecteditor/test/head.js
+++ b/browser/devtools/projecteditor/test/head.js
@@ -1,21 +1,21 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 const Cu = Components.utils;
-const {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
-const TargetFactory = devtools.TargetFactory;
+const {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
+const {TargetFactory} = require("devtools/framework/target");
 const {console} = Cu.import("resource://gre/modules/devtools/Console.jsm", {});
-const promise = devtools.require("sdk/core/promise");
+const promise = require("sdk/core/promise");
 const {FileUtils} = Cu.import("resource://gre/modules/FileUtils.jsm", {});
 const {NetUtil} = Cu.import("resource://gre/modules/NetUtil.jsm", {});
-const ProjectEditor = devtools.require("projecteditor/projecteditor");
-const DevToolsUtils = devtools.require("devtools/toolkit/DevToolsUtils");
+const ProjectEditor = require("projecteditor/projecteditor");
+const DevToolsUtils = require("devtools/toolkit/DevToolsUtils");
 
 const TEST_URL_ROOT = "http://mochi.test:8888/browser/browser/devtools/projecteditor/test/";
 const SAMPLE_WEBAPP_URL = TEST_URL_ROOT + "/helper_homepage.html";
 let TEMP_PATH;
 let TEMP_FOLDER_NAME = "ProjectEditor" + (new Date().getTime());
 
 // All test are asynchronous
 waitForExplicitFinish();
--- a/browser/devtools/responsivedesign/responsivedesign.jsm
+++ b/browser/devtools/responsivedesign/responsivedesign.jsm
@@ -11,17 +11,17 @@ Cu.import("resource://gre/modules/Servic
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 Cu.import("resource:///modules/devtools/gDevTools.jsm");
 Cu.import("resource://gre/modules/devtools/event-emitter.js");
 Cu.import("resource:///modules/devtools/ViewHelpers.jsm");
 let { Promise: promise } = Cu.import("resource://gre/modules/Promise.jsm", {});
 XPCOMUtils.defineLazyModuleGetter(this, "SystemAppProxy",
                                   "resource://gre/modules/SystemAppProxy.jsm");
 
-var require = Cu.import("resource://gre/modules/devtools/Loader.jsm", {}).devtools.require;
+let { require } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 let Telemetry = require("devtools/shared/telemetry");
 let { showDoorhanger } = require("devtools/shared/doorhanger");
 let { TouchEventSimulator } = require("devtools/toolkit/touch/simulator");
 let { Task } = require("resource://gre/modules/Task.jsm");
 
 this.EXPORTED_SYMBOLS = ["ResponsiveUIManager"];
 
 const MIN_WIDTH = 50;
--- a/browser/devtools/responsivedesign/test/head.js
+++ b/browser/devtools/responsivedesign/test/head.js
@@ -1,18 +1,18 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 const { Promise: promise } = Cu.import("resource://gre/modules/Promise.jsm", {});
 
-let {devtools} = Cu.import("resource:///modules/devtools/gDevTools.jsm", {});
-let TargetFactory = devtools.TargetFactory;
-let DevToolsUtils = devtools.require("devtools/toolkit/DevToolsUtils");
+let {require} = Cu.import("resource:///modules/devtools/gDevTools.jsm", {});
+let {TargetFactory} = require("devtools/framework/target");
+let DevToolsUtils = require("devtools/toolkit/DevToolsUtils");
 
 // Import the GCLI test helper
 let testDir = gTestPath.substr(0, gTestPath.lastIndexOf("/"));
 Services.scriptloader.loadSubScript(testDir + "../../../commandline/test/helpers.js", this);
 
 DevToolsUtils.testing = true;
 registerCleanupFunction(() => {
   DevToolsUtils.testing = false;
--- a/browser/devtools/scratchpad/scratchpad.js
+++ b/browser/devtools/scratchpad/scratchpad.js
@@ -38,17 +38,17 @@ const WRAP_TEXT = "devtools.scratchpad.w
 const SHOW_TRAILING_SPACE = "devtools.scratchpad.showTrailingSpace";
 const EDITOR_FONT_SIZE = "devtools.scratchpad.editorFontSize";
 const ENABLE_AUTOCOMPLETION = "devtools.scratchpad.enableAutocompletion";
 const TAB_SIZE = "devtools.editor.tabsize";
 const FALLBACK_CHARSET_LIST = "intl.fallbackCharsetList.ISO-8859-1";
 
 const VARIABLES_VIEW_URL = "chrome://browser/content/devtools/widgets/VariablesView.xul";
 
-const require   = Cu.import("resource://gre/modules/devtools/Loader.jsm", {}).devtools.require;
+const {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 
 const Telemetry = require("devtools/shared/telemetry");
 const Editor    = require("devtools/sourceeditor/editor");
 const TargetFactory = require("devtools/framework/target").TargetFactory;
 const EventEmitter = require("devtools/toolkit/event-emitter");
 const {DevToolsWorker} = require("devtools/toolkit/shared/worker");
 const DevToolsUtils = require("devtools/toolkit/DevToolsUtils");
 
--- a/browser/devtools/scratchpad/test/browser_scratchpad_close_toolbox.js
+++ b/browser/devtools/scratchpad/test/browser_scratchpad_close_toolbox.js
@@ -1,16 +1,16 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Test that closing the toolbox after having opened a scratchpad leaves the
 // latter in a functioning state.
 
 let {Task} = Cu.import("resource://gre/modules/Task.jsm", {});
-let {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
+let {TargetFactory} = require("devtools/framework/target");
 
 function test() {
   const options = {
     tabContent: "test closing toolbox and then reusing scratchpad"
   };
   openTabAndScratchpad(options)
     .then(Task.async(runTests))
     .then(finish, console.error);
@@ -19,17 +19,17 @@ function test() {
 function* runTests([win, sp]) {
   // Use the scratchpad before opening the toolbox.
   const source = "window.foobar = 7;";
   sp.setText(source);
   let [,,result] = yield sp.display();
   is(result, 7, "Display produced the expected output.");
 
   // Now open the toolbox and close it again.
-  let target = devtools.TargetFactory.forTab(gBrowser.selectedTab);
+  let target = TargetFactory.forTab(gBrowser.selectedTab);
   let toolbox = yield gDevTools.showToolbox(target, "webconsole");
   ok(toolbox, "Toolbox was opened.");
   let closed = yield gDevTools.closeToolbox(target);
   is(closed, true, "Toolbox was closed.");
 
   // Now see if using the scratcphad works as expected.
   sp.setText(source);
   let [,,result2] = yield sp.display();
--- a/browser/devtools/scratchpad/test/browser_scratchpad_inspect_primitives.js
+++ b/browser/devtools/scratchpad/test/browser_scratchpad_inspect_primitives.js
@@ -1,16 +1,15 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Test that inspecting primitive values uses the object inspector, not an
 // inline comment.
 
 let {Task} = Cu.import("resource://gre/modules/Task.jsm", {});
-let {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 
 function test() {
   const options = {
     tabContent: "test inspecting primitive values"
   };
   openTabAndScratchpad(options)
     .then(Task.async(runTests))
     .then(finish, console.error);
--- a/browser/devtools/scratchpad/test/browser_scratchpad_wrong_window_focus.js
+++ b/browser/devtools/scratchpad/test/browser_scratchpad_wrong_window_focus.js
@@ -21,20 +21,21 @@ function test()
   // is currently active (it should be the older one).
 
   gBrowser.selectedTab = gBrowser.addTab();
   gBrowser.selectedBrowser.addEventListener("load", function onLoad() {
     gBrowser.selectedBrowser.removeEventListener("load", onLoad, true);
 
     openScratchpad(function () {
       let sw = gScratchpadWindow;
-      let {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
+      let {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
+      let {TargetFactory} = require("devtools/framework/target");
 
       openScratchpad(function () {
-        let target = devtools.TargetFactory.forTab(gBrowser.selectedTab);
+        let target = TargetFactory.forTab(gBrowser.selectedTab);
         gDevTools.showToolbox(target, "webconsole").then((toolbox) => {
           let hud = toolbox.getCurrentPanel().hud;
           hud.jsterm.clearOutput(true);
           testFocus(sw, hud);
         });
       });
     });
   }, true);
--- a/browser/devtools/scratchpad/test/head.js
+++ b/browser/devtools/scratchpad/test/head.js
@@ -3,17 +3,17 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 const {NetUtil} = Cu.import("resource://gre/modules/NetUtil.jsm", {});
 const {FileUtils} = Cu.import("resource://gre/modules/FileUtils.jsm", {});
 const {Promise: promise} = Cu.import("resource://gre/modules/Promise.jsm", {});
 const {console} = Cu.import("resource://gre/modules/devtools/Console.jsm", {});
-const {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {}).devtools;
+const {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 const DevToolsUtils = require("devtools/toolkit/DevToolsUtils");
 const {Services} = Cu.import("resource://gre/modules/Services.jsm", {});
 
 
 let gScratchpadWindow; // Reference to the Scratchpad chrome window object
 
 DevToolsUtils.testing = true;
 SimpleTest.registerCleanupFunction(() => {
--- a/browser/devtools/shadereditor/shadereditor.js
+++ b/browser/devtools/shadereditor/shadereditor.js
@@ -7,17 +7,17 @@ const { classes: Cc, interfaces: Ci, uti
 
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 Cu.import("resource://gre/modules/Task.jsm");
 Cu.import("resource:///modules/devtools/SideMenuWidget.jsm");
 Cu.import("resource:///modules/devtools/ViewHelpers.jsm");
 Cu.import("resource://gre/modules/devtools/Console.jsm");
 
-const require = Cu.import("resource://gre/modules/devtools/Loader.jsm", {}).devtools.require;
+const {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 const promise = Cu.import("resource://gre/modules/Promise.jsm", {}).Promise;
 const EventEmitter = require("devtools/toolkit/event-emitter");
 const {Tooltip} = require("devtools/shared/widgets/Tooltip");
 const Editor = require("devtools/sourceeditor/editor");
 const Telemetry = require("devtools/shared/telemetry");
 const telemetry = new Telemetry();
 
 // The panel's window global is an EventEmitter firing the following events:
--- a/browser/devtools/shadereditor/test/head.js
+++ b/browser/devtools/shadereditor/test/head.js
@@ -8,25 +8,25 @@ let { Services } = Cu.import("resource:/
 
 let gEnableLogging = Services.prefs.getBoolPref("devtools.debugger.log");
 // To enable logging for try runs, just set the pref to true.
 Services.prefs.setBoolPref("devtools.debugger.log", false);
 
 let { Task } = Cu.import("resource://gre/modules/Task.jsm", {});
 let { Promise: promise } = Cu.import("resource://gre/modules/Promise.jsm", {});
 let { gDevTools } = Cu.import("resource:///modules/devtools/gDevTools.jsm", {});
-let { devtools } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
+let { require } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 let { DebuggerServer } = Cu.import("resource://gre/modules/devtools/dbg-server.jsm", {});
 let { DebuggerClient } = Cu.import("resource://gre/modules/devtools/dbg-client.jsm", {});
 
-let { WebGLFront } = devtools.require("devtools/server/actors/webgl");
-let DevToolsUtils = devtools.require("devtools/toolkit/DevToolsUtils");
-let TiltGL = devtools.require("devtools/tilt/tilt-gl");
-let TargetFactory = devtools.TargetFactory;
-let Toolbox = devtools.Toolbox;
+let { WebGLFront } = require("devtools/server/actors/webgl");
+let DevToolsUtils = require("devtools/toolkit/DevToolsUtils");
+let TiltGL = require("devtools/tilt/tilt-gl");
+let {TargetFactory} = require("devtools/framework/target");
+let {Toolbox} = require("devtools/framework/toolbox");
 let mm = null;
 
 const FRAME_SCRIPT_UTILS_URL = "chrome://browser/content/devtools/frame-script-utils.js"
 const EXAMPLE_URL = "http://example.com/browser/browser/devtools/shadereditor/test/";
 const SIMPLE_CANVAS_URL = EXAMPLE_URL + "doc_simple-canvas.html";
 const SHADER_ORDER_URL = EXAMPLE_URL + "doc_shader-order.html";
 const MULTIPLE_CONTEXTS_URL = EXAMPLE_URL + "doc_multiple-contexts.html";
 const OVERLAPPING_GEOMETRY_CANVAS_URL = EXAMPLE_URL + "doc_overlapping-geometry.html";
--- a/browser/devtools/shared/DeveloperToolbar.jsm
+++ b/browser/devtools/shared/DeveloperToolbar.jsm
@@ -8,17 +8,18 @@ this.EXPORTED_SYMBOLS = [ "DeveloperTool
 
 const NS_XHTML = "http://www.w3.org/1999/xhtml";
 const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
 const { classes: Cc, interfaces: Ci, utils: Cu } = Components;
 
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 Cu.import("resource://gre/modules/Services.jsm");
 
-const { require, TargetFactory } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {}).devtools;
+const { require } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
+const { TargetFactory } = require("devtools/framework/target");
 
 const Node = Ci.nsIDOMNode;
 
 XPCOMUtils.defineLazyModuleGetter(this, "console",
                                   "resource://gre/modules/devtools/Console.jsm");
 
 XPCOMUtils.defineLazyModuleGetter(this, "PluralForm",
                                   "resource://gre/modules/PluralForm.jsm");
--- a/browser/devtools/shared/Jsbeautify.jsm
+++ b/browser/devtools/shared/Jsbeautify.jsm
@@ -1,16 +1,16 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 "use strict";
 
 /*
- * JS Beautifier. Please use devtools.require("devtools/jsbeautify") instead of
+ * JS Beautifier. Please use require("devtools/jsbeautify") instead of
  * this JSM.
  */
 
 this.EXPORTED_SYMBOLS = [ "jsBeautify" ];
 
-const { devtools } = Components.utils.import("resource://gre/modules/devtools/Loader.jsm", {});
-const { beautify } = devtools.require("devtools/jsbeautify");
+const { require } = Components.utils.import("resource://gre/modules/devtools/Loader.jsm", {});
+const { beautify } = require("devtools/jsbeautify");
 const jsBeautify = beautify.js;
--- a/browser/devtools/shared/Parser.jsm
+++ b/browser/devtools/shared/Parser.jsm
@@ -4,18 +4,18 @@
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 "use strict";
 
 const Ci = Components.interfaces;
 const Cu = Components.utils;
 
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-const { devtools } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
-const DevToolsUtils = devtools.require("devtools/toolkit/DevToolsUtils");
+const { require } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
+const DevToolsUtils = require("devtools/toolkit/DevToolsUtils");
 
 XPCOMUtils.defineLazyModuleGetter(this,
   "Reflect", "resource://gre/modules/reflect.jsm");
 
 this.EXPORTED_SYMBOLS = ["Parser", "ParserHelpers", "SyntaxTreeVisitor"];
 
 /**
  * A JS parser using the reflection API.
--- a/browser/devtools/shared/test/browser_css_color.js
+++ b/browser/devtools/shared/test/browser_css_color.js
@@ -1,13 +1,13 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 const TEST_URI = "data:text/html;charset=utf-8,browser_css_color.js";
-let {colorUtils} = devtools.require("devtools/css-color");
+let {colorUtils} = require("devtools/css-color");
 let origColorUnit;
 
 add_task(function*() {
   yield promiseTab("about:blank");
   let [host, win, doc] = yield createHost("bottom", TEST_URI);
 
   info("Creating a test canvas element to test colors");
   let canvas = createTestCanvas(doc);
--- a/browser/devtools/shared/test/browser_cubic-bezier-01.js
+++ b/browser/devtools/shared/test/browser_cubic-bezier-01.js
@@ -3,17 +3,17 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 // Tests that the CubicBezierWidget generates content in a given parent node
 
 const TEST_URI = "chrome://browser/content/devtools/cubic-bezier-frame.xhtml";
 const {CubicBezierWidget} =
-  devtools.require("devtools/shared/widgets/CubicBezierWidget");
+  require("devtools/shared/widgets/CubicBezierWidget");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   let [host, win, doc] = yield createHost("bottom", TEST_URI);
 
   info("Checking that the graph markup is created in the parent");
   let container = doc.querySelector("#container");
   let w = new CubicBezierWidget(container);
--- a/browser/devtools/shared/test/browser_cubic-bezier-02.js
+++ b/browser/devtools/shared/test/browser_cubic-bezier-02.js
@@ -3,17 +3,17 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 // Tests the CubicBezierWidget events
 
 const TEST_URI = "chrome://browser/content/devtools/cubic-bezier-frame.xhtml";
 const {CubicBezierWidget} =
-  devtools.require("devtools/shared/widgets/CubicBezierWidget");
+  require("devtools/shared/widgets/CubicBezierWidget");
 const {PREDEFINED} = require("devtools/shared/widgets/CubicBezierPresets");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   let [host, win, doc] = yield createHost("bottom", TEST_URI);
 
   // Required or widget will be clipped inside of 'bottom'
   // host by -14. Setting `fixed` zeroes this which is needed for
--- a/browser/devtools/shared/test/browser_cubic-bezier-03.js
+++ b/browser/devtools/shared/test/browser_cubic-bezier-03.js
@@ -3,17 +3,17 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 // Tests that coordinates can be changed programatically in the CubicBezierWidget
 
 const TEST_URI = "chrome://browser/content/devtools/cubic-bezier-frame.xhtml";
 const {CubicBezierWidget} =
-  devtools.require("devtools/shared/widgets/CubicBezierWidget");
+  require("devtools/shared/widgets/CubicBezierWidget");
 const {PREDEFINED} = require("devtools/shared/widgets/CubicBezierPresets");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   let [host, win, doc] = yield createHost("bottom", TEST_URI);
 
   let container = doc.querySelector("#container");
   let w = new CubicBezierWidget(container, PREDEFINED.linear);
--- a/browser/devtools/shared/test/browser_cubic-bezier-04.js
+++ b/browser/devtools/shared/test/browser_cubic-bezier-04.js
@@ -3,17 +3,17 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 // Tests that the CubicBezierPresetWidget generates markup.
 
 const TEST_URI = "chrome://browser/content/devtools/cubic-bezier-frame.xhtml";
 const {CubicBezierPresetWidget} =
-  devtools.require("devtools/shared/widgets/CubicBezierWidget");
+  require("devtools/shared/widgets/CubicBezierWidget");
 const {PRESETS} = require("devtools/shared/widgets/CubicBezierPresets");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   let [host, win, doc] = yield createHost("bottom", TEST_URI);
 
   let container = doc.querySelector("#container");
   let w = new CubicBezierPresetWidget(container);
--- a/browser/devtools/shared/test/browser_cubic-bezier-05.js
+++ b/browser/devtools/shared/test/browser_cubic-bezier-05.js
@@ -3,17 +3,17 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 // Tests that the CubicBezierPresetWidget cycles menus
 
 const TEST_URI = "chrome://browser/content/devtools/cubic-bezier-frame.xhtml";
 const {CubicBezierPresetWidget} =
-  devtools.require("devtools/shared/widgets/CubicBezierWidget");
+  require("devtools/shared/widgets/CubicBezierWidget");
 const {PREDEFINED, PRESETS, DEFAULT_PRESET_CATEGORY} =
   require("devtools/shared/widgets/CubicBezierPresets");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   let [host, win, doc] = yield createHost("bottom", TEST_URI);
 
   let container = doc.querySelector("#container");
--- a/browser/devtools/shared/test/browser_cubic-bezier-06.js
+++ b/browser/devtools/shared/test/browser_cubic-bezier-06.js
@@ -4,17 +4,17 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 // Tests the integration between CubicBezierWidget and CubicBezierPresets
 
 const TEST_URI = "chrome://browser/content/devtools/cubic-bezier-frame.xhtml";
 const {CubicBezierWidget} =
-  devtools.require("devtools/shared/widgets/CubicBezierWidget");
+  require("devtools/shared/widgets/CubicBezierWidget");
 const {PRESETS} = require("devtools/shared/widgets/CubicBezierPresets");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   let [host, win, doc] = yield createHost("bottom", TEST_URI);
 
   let container = doc.querySelector("#container");
   let w = new CubicBezierWidget(container,
--- a/browser/devtools/shared/test/browser_devices.js
+++ b/browser/devtools/shared/test/browser_devices.js
@@ -1,12 +1,12 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
-let { GetDevices, GetDeviceString, AddDevice } = devtools.require("devtools/shared/devices");
+let { GetDevices, GetDeviceString, AddDevice } = require("devtools/shared/devices");
 
 add_task(function*() {
   Services.prefs.setCharPref("devtools.devices.url", TEST_URI_ROOT + "browser_devices.json");
 
   let devices = yield GetDevices();
 
   is(devices.TYPES.length, 1, "Found 1 device type.");
 
--- a/browser/devtools/shared/test/browser_flame-graph-01.js
+++ b/browser/devtools/shared/test/browser_flame-graph-01.js
@@ -1,15 +1,15 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that flame graph widget works properly.
 
-let {FlameGraph} = devtools.require("devtools/shared/widgets/FlameGraph");
-let {Promise} = devtools.require("resource://gre/modules/Promise.jsm");
+let {FlameGraph} = require("devtools/shared/widgets/FlameGraph");
+let {Promise} = require("resource://gre/modules/Promise.jsm");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   yield performTest();
   gBrowser.removeCurrentTab();
 });
 
 function* performTest() {
--- a/browser/devtools/shared/test/browser_flame-graph-02.js
+++ b/browser/devtools/shared/test/browser_flame-graph-02.js
@@ -1,15 +1,15 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that flame graph widgets may have a fixed width or height.
 
-let {FlameGraph} = devtools.require("devtools/shared/widgets/FlameGraph");
-let {Promise} = devtools.require("resource://gre/modules/Promise.jsm");
+let {FlameGraph} = require("devtools/shared/widgets/FlameGraph");
+let {Promise} = require("resource://gre/modules/Promise.jsm");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   yield performTest();
   gBrowser.removeCurrentTab();
 });
 
 function* performTest() {
--- a/browser/devtools/shared/test/browser_flame-graph-03a.js
+++ b/browser/devtools/shared/test/browser_flame-graph-03a.js
@@ -3,18 +3,18 @@
 
 // Tests that selections in the flame graph widget work properly.
 
 let TEST_DATA = [{ color: "#f00", blocks: [{ x: 0, y: 0, width: 50, height: 20, text: "FOO" }, { x: 50, y: 0, width: 100, height: 20, text: "BAR" }] }, { color: "#00f", blocks: [{ x: 0, y: 30, width: 30, height: 20, text: "BAZ" }] }];
 let TEST_BOUNDS = { startTime: 0, endTime: 150 };
 let TEST_WIDTH = 200;
 let TEST_HEIGHT = 100;
 
-let {FlameGraph} = devtools.require("devtools/shared/widgets/FlameGraph");
-let {Promise} = devtools.require("resource://gre/modules/Promise.jsm");
+let {FlameGraph} = require("devtools/shared/widgets/FlameGraph");
+let {Promise} = require("resource://gre/modules/Promise.jsm");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   yield performTest();
   gBrowser.removeCurrentTab();
 });
 
 function* performTest() {
--- a/browser/devtools/shared/test/browser_flame-graph-03b.js
+++ b/browser/devtools/shared/test/browser_flame-graph-03b.js
@@ -4,18 +4,18 @@
 // Tests that selections in the flame graph widget work properly on HiDPI.
 
 let TEST_DATA = [{ color: "#f00", blocks: [{ x: 0, y: 0, width: 50, height: 20, text: "FOO" }, { x: 50, y: 0, width: 100, height: 20, text: "BAR" }] }, { color: "#00f", blocks: [{ x: 0, y: 30, width: 30, height: 20, text: "BAZ" }] }];
 let TEST_BOUNDS = { startTime: 0, endTime: 150 };
 let TEST_WIDTH = 200;
 let TEST_HEIGHT = 100;
 let TEST_DPI_DENSITIY = 2;
 
-let {FlameGraph} = devtools.require("devtools/shared/widgets/FlameGraph");
-let {Promise} = devtools.require("resource://gre/modules/Promise.jsm");
+let {FlameGraph} = require("devtools/shared/widgets/FlameGraph");
+let {Promise} = require("resource://gre/modules/Promise.jsm");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   yield performTest();
   gBrowser.removeCurrentTab();
 });
 
 function* performTest() {
--- a/browser/devtools/shared/test/browser_flame-graph-03c.js
+++ b/browser/devtools/shared/test/browser_flame-graph-03c.js
@@ -4,18 +4,18 @@
 // Tests that vertical panning in the flame graph widget works properly.
 
 let TEST_DATA = [{ color: "#f00", blocks: [{ x: 0, y: 0, width: 50, height: 20, text: "FOO" }, { x: 50, y: 0, width: 100, height: 20, text: "BAR" }] }, { color: "#00f", blocks: [{ x: 0, y: 30, width: 30, height: 20, text: "BAZ" }] }];
 let TEST_BOUNDS = { startTime: 0, endTime: 150 };
 let TEST_WIDTH = 200;
 let TEST_HEIGHT = 100;
 let TEST_DPI_DENSITIY = 2;
 
-let {FlameGraph} = devtools.require("devtools/shared/widgets/FlameGraph");
-let {Promise} = devtools.require("resource://gre/modules/Promise.jsm");
+let {FlameGraph} = require("devtools/shared/widgets/FlameGraph");
+let {Promise} = require("resource://gre/modules/Promise.jsm");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   yield performTest();
   gBrowser.removeCurrentTab();
 });
 
 function* performTest() {
--- a/browser/devtools/shared/test/browser_flame-graph-04.js
+++ b/browser/devtools/shared/test/browser_flame-graph-04.js
@@ -1,19 +1,19 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that text metrics in the flame graph widget work properly.
 
 let HTML_NS = "http://www.w3.org/1999/xhtml";
 let {ViewHelpers} = Cu.import("resource:///modules/devtools/ViewHelpers.jsm", {});
-let {FlameGraph} = devtools.require("devtools/shared/widgets/FlameGraph");
-let {FLAME_GRAPH_BLOCK_TEXT_FONT_SIZE} = devtools.require("devtools/shared/widgets/FlameGraph");
-let {FLAME_GRAPH_BLOCK_TEXT_FONT_FAMILY} = devtools.require("devtools/shared/widgets/FlameGraph");
-let {Promise} = devtools.require("resource://gre/modules/Promise.jsm");
+let {FlameGraph} = require("devtools/shared/widgets/FlameGraph");
+let {FLAME_GRAPH_BLOCK_TEXT_FONT_SIZE} = require("devtools/shared/widgets/FlameGraph");
+let {FLAME_GRAPH_BLOCK_TEXT_FONT_FAMILY} = require("devtools/shared/widgets/FlameGraph");
+let {Promise} = require("resource://gre/modules/Promise.jsm");
 
 let L10N = new ViewHelpers.L10N();
 
 add_task(function*() {
   yield promiseTab("about:blank");
   yield performTest();
   gBrowser.removeCurrentTab();
 });
--- a/browser/devtools/shared/test/browser_flame-graph-utils-01.js
+++ b/browser/devtools/shared/test/browser_flame-graph-utils-01.js
@@ -1,16 +1,16 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that text metrics and data conversion from profiler samples
 // widget work properly in the flame graph.
 
-let {FlameGraphUtils} = devtools.require("devtools/shared/widgets/FlameGraph");
-let {PALLETTE_SIZE} = devtools.require("devtools/shared/widgets/FlameGraph");
+let {FlameGraphUtils} = require("devtools/shared/widgets/FlameGraph");
+let {PALLETTE_SIZE} = require("devtools/shared/widgets/FlameGraph");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   yield performTest();
   gBrowser.removeCurrentTab();
 });
 
 function* performTest() {
--- a/browser/devtools/shared/test/browser_flame-graph-utils-02.js
+++ b/browser/devtools/shared/test/browser_flame-graph-utils-02.js
@@ -1,15 +1,15 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests consecutive duplicate frames are removed from the flame graph data.
 
-let {FlameGraphUtils} = devtools.require("devtools/shared/widgets/FlameGraph");
-let {PALLETTE_SIZE} = devtools.require("devtools/shared/widgets/FlameGraph");
+let {FlameGraphUtils} = require("devtools/shared/widgets/FlameGraph");
+let {PALLETTE_SIZE} = require("devtools/shared/widgets/FlameGraph");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   yield performTest();
   gBrowser.removeCurrentTab();
 });
 
 function* performTest() {
--- a/browser/devtools/shared/test/browser_flame-graph-utils-03.js
+++ b/browser/devtools/shared/test/browser_flame-graph-utils-03.js
@@ -1,16 +1,16 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests if platform frames are removed from the flame graph data.
 
-let {FlameGraphUtils} = devtools.require("devtools/shared/widgets/FlameGraph");
-let {PALLETTE_SIZE} = devtools.require("devtools/shared/widgets/FlameGraph");
-let {FrameNode} = devtools.require("devtools/performance/tree-model");
+let {FlameGraphUtils} = require("devtools/shared/widgets/FlameGraph");
+let {PALLETTE_SIZE} = require("devtools/shared/widgets/FlameGraph");
+let {FrameNode} = require("devtools/performance/tree-model");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   yield performTest();
   gBrowser.removeCurrentTab();
 });
 
 function* performTest() {
--- a/browser/devtools/shared/test/browser_flame-graph-utils-04.js
+++ b/browser/devtools/shared/test/browser_flame-graph-utils-04.js
@@ -1,16 +1,16 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests if (idle) nodes are added when necessary in the flame graph data.
 
-let {FlameGraphUtils} = devtools.require("devtools/shared/widgets/FlameGraph");
-let {PALLETTE_SIZE} = devtools.require("devtools/shared/widgets/FlameGraph");
-let {FrameNode} = devtools.require("devtools/performance/tree-model");
+let {FlameGraphUtils} = require("devtools/shared/widgets/FlameGraph");
+let {PALLETTE_SIZE} = require("devtools/shared/widgets/FlameGraph");
+let {FrameNode} = require("devtools/performance/tree-model");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   yield performTest();
   gBrowser.removeCurrentTab();
 });
 
 function* performTest() {
--- a/browser/devtools/shared/test/browser_flame-graph-utils-05.js
+++ b/browser/devtools/shared/test/browser_flame-graph-utils-05.js
@@ -1,14 +1,14 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that flame graph data is cached, and that the cache may be cleared.
 
-let {FlameGraphUtils} = devtools.require("devtools/shared/widgets/FlameGraph");
+let {FlameGraphUtils} = require("devtools/shared/widgets/FlameGraph");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   yield performTest();
   gBrowser.removeCurrentTab();
 });
 
 function* performTest() {
--- a/browser/devtools/shared/test/browser_flame-graph-utils-06.js
+++ b/browser/devtools/shared/test/browser_flame-graph-utils-06.js
@@ -1,16 +1,16 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that the text displayed is the function name, file name and line number
 // if applicable.
 
-let {FlameGraphUtils} = devtools.require("devtools/shared/widgets/FlameGraph");
-let {PALLETTE_SIZE} = devtools.require("devtools/shared/widgets/FlameGraph");
+let {FlameGraphUtils} = require("devtools/shared/widgets/FlameGraph");
+let {PALLETTE_SIZE} = require("devtools/shared/widgets/FlameGraph");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   yield performTest();
   gBrowser.removeCurrentTab();
 });
 
 function* performTest() {
--- a/browser/devtools/shared/test/browser_flame-graph-utils-hash.js
+++ b/browser/devtools/shared/test/browser_flame-graph-utils-hash.js
@@ -1,14 +1,14 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests if (idle) nodes are added when necessary in the flame graph data.
 
-let {FlameGraphUtils} = devtools.require("devtools/shared/widgets/FlameGraph");
+let {FlameGraphUtils} = require("devtools/shared/widgets/FlameGraph");
 
 let test = Task.async(function*() {
   let hash1 = FlameGraphUtils._getStringHash("abc");
   let hash2 = FlameGraphUtils._getStringHash("acb");
   let hash3 = FlameGraphUtils._getStringHash(Array.from(Array(100000)).join("a"));
   let hash4 = FlameGraphUtils._getStringHash(Array.from(Array(100000)).join("b"));
 
   isnot(hash1, hash2, "The hashes should not be equal (1).");
--- a/browser/devtools/shared/test/browser_graphs-01.js
+++ b/browser/devtools/shared/test/browser_graphs-01.js
@@ -1,15 +1,15 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that graph widgets works properly.
 
-let LineGraphWidget = devtools.require("devtools/shared/widgets/LineGraphWidget");
-let {Promise} = devtools.require("resource://gre/modules/Promise.jsm");
+let LineGraphWidget = require("devtools/shared/widgets/LineGraphWidget");
+let {Promise} = require("resource://gre/modules/Promise.jsm");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   yield performTest();
   gBrowser.removeCurrentTab();
   finish();
 });
 
--- a/browser/devtools/shared/test/browser_graphs-02.js
+++ b/browser/devtools/shared/test/browser_graphs-02.js
@@ -1,17 +1,17 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that graph widgets can properly add data, regions and highlights.
 
 const TEST_DATA = [{ delta: 112, value: 48 }, { delta: 213, value: 59 }, { delta: 313, value: 60 }, { delta: 413, value: 59 }, { delta: 530, value: 59 }, { delta: 646, value: 58 }, { delta: 747, value: 60 }, { delta: 863, value: 48 }, { delta: 980, value: 37 }, { delta: 1097, value: 30 }, { delta: 1213, value: 29 }, { delta: 1330, value: 23 }, { delta: 1430, value: 10 }, { delta: 1534, value: 17 }, { delta: 1645, value: 20 }, { delta: 1746, value: 22 }, { delta: 1846, value: 39 }, { delta: 1963, value: 26 }, { delta: 2080, value: 27 }, { delta: 2197, value: 35 }, { delta: 2312, value: 47 }, { delta: 2412, value: 53 }, { delta: 2514, value: 60 }, { delta: 2630, value: 37 }, { delta: 2730, value: 36 }, { delta: 2830, value: 37 }, { delta: 2946, value: 36 }, { delta: 3046, value: 40 }, { delta: 3163, value: 47 }, { delta: 3280, value: 41 }, { delta: 3380, value: 35 }, { delta: 3480, value: 27 }, { delta: 3580, value: 39 }, { delta: 3680, value: 42 }, { delta: 3780, value: 49 }, { delta: 3880, value: 55 }, { delta: 3980, value: 60 }, { delta: 4080, value: 60 }, { delta: 4180, value: 60 }];
 const TEST_REGIONS = [{ start: 320, end: 460 }, { start: 780, end: 860 }];
-let LineGraphWidget = devtools.require("devtools/shared/widgets/LineGraphWidget");
-let {Promise} = devtools.require("resource://gre/modules/Promise.jsm");
+let LineGraphWidget = require("devtools/shared/widgets/LineGraphWidget");
+let {Promise} = require("resource://gre/modules/Promise.jsm");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   yield performTest();
   gBrowser.removeCurrentTab();
 });
 
 function* performTest() {
--- a/browser/devtools/shared/test/browser_graphs-03.js
+++ b/browser/devtools/shared/test/browser_graphs-03.js
@@ -1,16 +1,16 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that graph widgets can handle clients getting/setting the
 // selection or cursor.
 
-let LineGraphWidget = devtools.require("devtools/shared/widgets/LineGraphWidget");
-let {Promise} = devtools.require("resource://gre/modules/Promise.jsm");
+let LineGraphWidget = require("devtools/shared/widgets/LineGraphWidget");
+let {Promise} = require("resource://gre/modules/Promise.jsm");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   yield performTest();
   gBrowser.removeCurrentTab();
 });
 
 function* performTest() {
--- a/browser/devtools/shared/test/browser_graphs-04.js
+++ b/browser/devtools/shared/test/browser_graphs-04.js
@@ -1,15 +1,15 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that graph widgets can correctly compare selections and cursors.
 
-let LineGraphWidget = devtools.require("devtools/shared/widgets/LineGraphWidget");
-let {Promise} = devtools.require("resource://gre/modules/Promise.jsm");
+let LineGraphWidget = require("devtools/shared/widgets/LineGraphWidget");
+let {Promise} = require("resource://gre/modules/Promise.jsm");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   yield performTest();
   gBrowser.removeCurrentTab();
 });
 
 function* performTest() {
--- a/browser/devtools/shared/test/browser_graphs-05.js
+++ b/browser/devtools/shared/test/browser_graphs-05.js
@@ -1,17 +1,17 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that graph widgets can correctly determine which regions are hovered.
 
 const TEST_DATA = [{ delta: 112, value: 48 }, { delta: 213, value: 59 }, { delta: 313, value: 60 }, { delta: 413, value: 59 }, { delta: 530, value: 59 }, { delta: 646, value: 58 }, { delta: 747, value: 60 }, { delta: 863, value: 48 }, { delta: 980, value: 37 }, { delta: 1097, value: 30 }, { delta: 1213, value: 29 }, { delta: 1330, value: 23 }, { delta: 1430, value: 10 }, { delta: 1534, value: 17 }, { delta: 1645, value: 20 }, { delta: 1746, value: 22 }, { delta: 1846, value: 39 }, { delta: 1963, value: 26 }, { delta: 2080, value: 27 }, { delta: 2197, value: 35 }, { delta: 2312, value: 47 }, { delta: 2412, value: 53 }, { delta: 2514, value: 60 }, { delta: 2630, value: 37 }, { delta: 2730, value: 36 }, { delta: 2830, value: 37 }, { delta: 2946, value: 36 }, { delta: 3046, value: 40 }, { delta: 3163, value: 47 }, { delta: 3280, value: 41 }, { delta: 3380, value: 35 }, { delta: 3480, value: 27 }, { delta: 3580, value: 39 }, { delta: 3680, value: 42 }, { delta: 3780, value: 49 }, { delta: 3880, value: 55 }, { delta: 3980, value: 60 }, { delta: 4080, value: 60 }, { delta: 4180, value: 60 }];
 const TEST_REGIONS = [{ start: 320, end: 460 }, { start: 780, end: 860 }];
-let LineGraphWidget = devtools.require("devtools/shared/widgets/LineGraphWidget");
-let {Promise} = devtools.require("resource://gre/modules/Promise.jsm");
+let LineGraphWidget = require("devtools/shared/widgets/LineGraphWidget");
+let {Promise} = require("resource://gre/modules/Promise.jsm");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   yield performTest();
   gBrowser.removeCurrentTab();
 });
 
 function* performTest() {
--- a/browser/devtools/shared/test/browser_graphs-06.js
+++ b/browser/devtools/shared/test/browser_graphs-06.js
@@ -1,17 +1,17 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests if clicking on regions adds a selection spanning that region.
 
 const TEST_DATA = [{ delta: 112, value: 48 }, { delta: 213, value: 59 }, { delta: 313, value: 60 }, { delta: 413, value: 59 }, { delta: 530, value: 59 }, { delta: 646, value: 58 }, { delta: 747, value: 60 }, { delta: 863, value: 48 }, { delta: 980, value: 37 }, { delta: 1097, value: 30 }, { delta: 1213, value: 29 }, { delta: 1330, value: 23 }, { delta: 1430, value: 10 }, { delta: 1534, value: 17 }, { delta: 1645, value: 20 }, { delta: 1746, value: 22 }, { delta: 1846, value: 39 }, { delta: 1963, value: 26 }, { delta: 2080, value: 27 }, { delta: 2197, value: 35 }, { delta: 2312, value: 47 }, { delta: 2412, value: 53 }, { delta: 2514, value: 60 }, { delta: 2630, value: 37 }, { delta: 2730, value: 36 }, { delta: 2830, value: 37 }, { delta: 2946, value: 36 }, { delta: 3046, value: 40 }, { delta: 3163, value: 47 }, { delta: 3280, value: 41 }, { delta: 3380, value: 35 }, { delta: 3480, value: 27 }, { delta: 3580, value: 39 }, { delta: 3680, value: 42 }, { delta: 3780, value: 49 }, { delta: 3880, value: 55 }, { delta: 3980, value: 60 }, { delta: 4080, value: 60 }, { delta: 4180, value: 60 }];
 const TEST_REGIONS = [{ start: 320, end: 460 }, { start: 780, end: 860 }];
-let LineGraphWidget = devtools.require("devtools/shared/widgets/LineGraphWidget");
-let {Promise} = devtools.require("resource://gre/modules/Promise.jsm");
+let LineGraphWidget = require("devtools/shared/widgets/LineGraphWidget");
+let {Promise} = require("resource://gre/modules/Promise.jsm");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   yield performTest();
   gBrowser.removeCurrentTab();
 });
 
 function* performTest() {
--- a/browser/devtools/shared/test/browser_graphs-07a.js
+++ b/browser/devtools/shared/test/browser_graphs-07a.js
@@ -1,16 +1,16 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests if selecting, resizing, moving selections and zooming in/out works.
 
 const TEST_DATA = [{ delta: 112, value: 48 }, { delta: 213, value: 59 }, { delta: 313, value: 60 }, { delta: 413, value: 59 }, { delta: 530, value: 59 }, { delta: 646, value: 58 }, { delta: 747, value: 60 }, { delta: 863, value: 48 }, { delta: 980, value: 37 }, { delta: 1097, value: 30 }, { delta: 1213, value: 29 }, { delta: 1330, value: 23 }, { delta: 1430, value: 10 }, { delta: 1534, value: 17 }, { delta: 1645, value: 20 }, { delta: 1746, value: 22 }, { delta: 1846, value: 39 }, { delta: 1963, value: 26 }, { delta: 2080, value: 27 }, { delta: 2197, value: 35 }, { delta: 2312, value: 47 }, { delta: 2412, value: 53 }, { delta: 2514, value: 60 }, { delta: 2630, value: 37 }, { delta: 2730, value: 36 }, { delta: 2830, value: 37 }, { delta: 2946, value: 36 }, { delta: 3046, value: 40 }, { delta: 3163, value: 47 }, { delta: 3280, value: 41 }, { delta: 3380, value: 35 }, { delta: 3480, value: 27 }, { delta: 3580, value: 39 }, { delta: 3680, value: 42 }, { delta: 3780, value: 49 }, { delta: 3880, value: 55 }, { delta: 3980, value: 60 }, { delta: 4080, value: 60 }, { delta: 4180, value: 60 }];
-let LineGraphWidget = devtools.require("devtools/shared/widgets/LineGraphWidget");
-let {Promise} = devtools.require("resource://gre/modules/Promise.jsm");
+let LineGraphWidget = require("devtools/shared/widgets/LineGraphWidget");
+let {Promise} = require("resource://gre/modules/Promise.jsm");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   yield performTest();
   gBrowser.removeCurrentTab();
 });
 
 function* performTest() {
--- a/browser/devtools/shared/test/browser_graphs-07b.js
+++ b/browser/devtools/shared/test/browser_graphs-07b.js
@@ -1,16 +1,16 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests if selections can't be added via clicking, while not allowed.
 
 const TEST_DATA = [{ delta: 112, value: 48 }, { delta: 213, value: 59 }, { delta: 313, value: 60 }, { delta: 413, value: 59 }, { delta: 530, value: 59 }, { delta: 646, value: 58 }, { delta: 747, value: 60 }, { delta: 863, value: 48 }, { delta: 980, value: 37 }, { delta: 1097, value: 30 }, { delta: 1213, value: 29 }, { delta: 1330, value: 23 }, { delta: 1430, value: 10 }, { delta: 1534, value: 17 }, { delta: 1645, value: 20 }, { delta: 1746, value: 22 }, { delta: 1846, value: 39 }, { delta: 1963, value: 26 }, { delta: 2080, value: 27 }, { delta: 2197, value: 35 }, { delta: 2312, value: 47 }, { delta: 2412, value: 53 }, { delta: 2514, value: 60 }, { delta: 2630, value: 37 }, { delta: 2730, value: 36 }, { delta: 2830, value: 37 }, { delta: 2946, value: 36 }, { delta: 3046, value: 40 }, { delta: 3163, value: 47 }, { delta: 3280, value: 41 }, { delta: 3380, value: 35 }, { delta: 3480, value: 27 }, { delta: 3580, value: 39 }, { delta: 3680, value: 42 }, { delta: 3780, value: 49 }, { delta: 3880, value: 55 }, { delta: 3980, value: 60 }, { delta: 4080, value: 60 }, { delta: 4180, value: 60 }];
-let LineGraphWidget = devtools.require("devtools/shared/widgets/LineGraphWidget");
-let {Promise} = devtools.require("resource://gre/modules/Promise.jsm");
+let LineGraphWidget = require("devtools/shared/widgets/LineGraphWidget");
+let {Promise} = require("resource://gre/modules/Promise.jsm");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   yield performTest();
   gBrowser.removeCurrentTab();
 });
 
 function* performTest() {
--- a/browser/devtools/shared/test/browser_graphs-07c.js
+++ b/browser/devtools/shared/test/browser_graphs-07c.js
@@ -1,18 +1,18 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests if movement via event dispatching using screenX / screenY
 // works.  All of the other tests directly use the graph's mouse event
 // callbacks with textX / testY for convenience.
 
 const TEST_DATA = [{ delta: 112, value: 48 }, { delta: 213, value: 59 }, { delta: 313, value: 60 }, { delta: 413, value: 59 }, { delta: 530, value: 59 }, { delta: 646, value: 58 }, { delta: 747, value: 60 }, { delta: 863, value: 48 }, { delta: 980, value: 37 }, { delta: 1097, value: 30 }, { delta: 1213, value: 29 }, { delta: 1330, value: 23 }, { delta: 1430, value: 10 }, { delta: 1534, value: 17 }, { delta: 1645, value: 20 }, { delta: 1746, value: 22 }, { delta: 1846, value: 39 }, { delta: 1963, value: 26 }, { delta: 2080, value: 27 }, { delta: 2197, value: 35 }, { delta: 2312, value: 47 }, { delta: 2412, value: 53 }, { delta: 2514, value: 60 }, { delta: 2630, value: 37 }, { delta: 2730, value: 36 }, { delta: 2830, value: 37 }, { delta: 2946, value: 36 }, { delta: 3046, value: 40 }, { delta: 3163, value: 47 }, { delta: 3280, value: 41 }, { delta: 3380, value: 35 }, { delta: 3480, value: 27 }, { delta: 3580, value: 39 }, { delta: 3680, value: 42 }, { delta: 3780, value: 49 }, { delta: 3880, value: 55 }, { delta: 3980, value: 60 }, { delta: 4080, value: 60 }, { delta: 4180, value: 60 }];
-let LineGraphWidget = devtools.require("devtools/shared/widgets/LineGraphWidget");
-let {Promise} = devtools.require("resource://gre/modules/Promise.jsm");
+let LineGraphWidget = require("devtools/shared/widgets/LineGraphWidget");
+let {Promise} = require("resource://gre/modules/Promise.jsm");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   yield performTest();
   gBrowser.removeCurrentTab();
 });
 
 function* performTest() {
--- a/browser/devtools/shared/test/browser_graphs-07d.js
+++ b/browser/devtools/shared/test/browser_graphs-07d.js
@@ -1,17 +1,17 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that selections are drawn onto the canvas.
 
 const TEST_DATA = [{ delta: 112, value: 48 }, { delta: 213, value: 59 }, { delta: 313, value: 60 }, { delta: 413, value: 59 }, { delta: 530, value: 59 }, { delta: 646, value: 58 }, { delta: 747, value: 60 }, { delta: 863, value: 48 }, { delta: 980, value: 37 }, { delta: 1097, value: 30 }, { delta: 1213, value: 29 }, { delta: 1330, value: 23 }, { delta: 1430, value: 10 }, { delta: 1534, value: 17 }, { delta: 1645, value: 20 }, { delta: 1746, value: 22 }, { delta: 1846, value: 39 }, { delta: 1963, value: 26 }, { delta: 2080, value: 27 }, { delta: 2197, value: 35 }, { delta: 2312, value: 47 }, { delta: 2412, value: 53 }, { delta: 2514, value: 60 }, { delta: 2630, value: 37 }, { delta: 2730, value: 36 }, { delta: 2830, value: 37 }, { delta: 2946, value: 36 }, { delta: 3046, value: 40 }, { delta: 3163, value: 47 }, { delta: 3280, value: 41 }, { delta: 3380, value: 35 }, { delta: 3480, value: 27 }, { delta: 3580, value: 39 }, { delta: 3680, value: 42 }, { delta: 3780, value: 49 }, { delta: 3880, value: 55 }, { delta: 3980, value: 60 }, { delta: 4080, value: 60 }, { delta: 4180, value: 60 }];
 const TEST_REGIONS = [{ start: 320, end: 460 }, { start: 780, end: 860 }];
-let LineGraphWidget = devtools.require("devtools/shared/widgets/LineGraphWidget");
-let {Promise} = devtools.require("resource://gre/modules/Promise.jsm");
+let LineGraphWidget = require("devtools/shared/widgets/LineGraphWidget");
+let {Promise} = require("resource://gre/modules/Promise.jsm");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   yield performTest();
   gBrowser.removeCurrentTab();
 });
 
 function* performTest() {
--- a/browser/devtools/shared/test/browser_graphs-07e.js
+++ b/browser/devtools/shared/test/browser_graphs-07e.js
@@ -1,16 +1,16 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that selections are drawn onto the canvas.
 
 const TEST_DATA = [{ delta: 112, value: 48 }, { delta: 213, value: 59 }, { delta: 313, value: 60 }, { delta: 413, value: 59 }, { delta: 530, value: 59 }, { delta: 646, value: 58 }, { delta: 747, value: 60 }, { delta: 863, value: 48 }, { delta: 980, value: 37 }, { delta: 1097, value: 30 }, { delta: 1213, value: 29 }, { delta: 1330, value: 23 }, { delta: 1430, value: 10 }, { delta: 1534, value: 17 }, { delta: 1645, value: 20 }, { delta: 1746, value: 22 }, { delta: 1846, value: 39 }, { delta: 1963, value: 26 }, { delta: 2080, value: 27 }, { delta: 2197, value: 35 }, { delta: 2312, value: 47 }, { delta: 2412, value: 53 }, { delta: 2514, value: 60 }, { delta: 2630, value: 37 }, { delta: 2730, value: 36 }, { delta: 2830, value: 37 }, { delta: 2946, value: 36 }, { delta: 3046, value: 40 }, { delta: 3163, value: 47 }, { delta: 3280, value: 41 }, { delta: 3380, value: 35 }, { delta: 3480, value: 27 }, { delta: 3580, value: 39 }, { delta: 3680, value: 42 }, { delta: 3780, value: 49 }, { delta: 3880, value: 55 }, { delta: 3980, value: 60 }, { delta: 4080, value: 60 }, { delta: 4180, value: 60 }];
-let LineGraphWidget = devtools.require("devtools/shared/widgets/LineGraphWidget");
-let {Promise} = devtools.require("resource://gre/modules/Promise.jsm");
+let LineGraphWidget = require("devtools/shared/widgets/LineGraphWidget");
+let {Promise} = require("resource://gre/modules/Promise.jsm");
 let CURRENT_ZOOM = 1;
 
 add_task(function*() {
   yield promiseTab("about:blank");
   yield performTest();
   gBrowser.removeCurrentTab();
 });
 
--- a/browser/devtools/shared/test/browser_graphs-08.js
+++ b/browser/devtools/shared/test/browser_graphs-08.js
@@ -1,16 +1,16 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests if a selection is dropped when clicking outside of it.
 
 const TEST_DATA = [{ delta: 112, value: 48 }, { delta: 213, value: 59 }, { delta: 313, value: 60 }, { delta: 413, value: 59 }, { delta: 530, value: 59 }, { delta: 646, value: 58 }, { delta: 747, value: 60 }, { delta: 863, value: 48 }, { delta: 980, value: 37 }, { delta: 1097, value: 30 }, { delta: 1213, value: 29 }, { delta: 1330, value: 23 }, { delta: 1430, value: 10 }, { delta: 1534, value: 17 }, { delta: 1645, value: 20 }, { delta: 1746, value: 22 }, { delta: 1846, value: 39 }, { delta: 1963, value: 26 }, { delta: 2080, value: 27 }, { delta: 2197, value: 35 }, { delta: 2312, value: 47 }, { delta: 2412, value: 53 }, { delta: 2514, value: 60 }, { delta: 2630, value: 37 }, { delta: 2730, value: 36 }, { delta: 2830, value: 37 }, { delta: 2946, value: 36 }, { delta: 3046, value: 40 }, { delta: 3163, value: 47 }, { delta: 3280, value: 41 }, { delta: 3380, value: 35 }, { delta: 3480, value: 27 }, { delta: 3580, value: 39 }, { delta: 3680, value: 42 }, { delta: 3780, value: 49 }, { delta: 3880, value: 55 }, { delta: 3980, value: 60 }, { delta: 4080, value: 60 }, { delta: 4180, value: 60 }];
-let LineGraphWidget = devtools.require("devtools/shared/widgets/LineGraphWidget");
-let {Promise} = devtools.require("resource://gre/modules/Promise.jsm");
+let LineGraphWidget = require("devtools/shared/widgets/LineGraphWidget");
+let {Promise} = require("resource://gre/modules/Promise.jsm");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   yield performTest();
   gBrowser.removeCurrentTab();
 });
 
 function* performTest() {
--- a/browser/devtools/shared/test/browser_graphs-09a.js
+++ b/browser/devtools/shared/test/browser_graphs-09a.js
@@ -1,16 +1,16 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that line graphs properly create the gutter and tooltips.
 
 const TEST_DATA = [{ delta: 112, value: 48 }, { delta: 213, value: 59 }, { delta: 313, value: 60 }, { delta: 413, value: 59 }, { delta: 530, value: 59 }, { delta: 646, value: 58 }, { delta: 747, value: 60 }, { delta: 863, value: 48 }, { delta: 980, value: 37 }, { delta: 1097, value: 30 }, { delta: 1213, value: 29 }, { delta: 1330, value: 23 }, { delta: 1430, value: 10 }, { delta: 1534, value: 17 }, { delta: 1645, value: 20 }, { delta: 1746, value: 22 }, { delta: 1846, value: 39 }, { delta: 1963, value: 26 }, { delta: 2080, value: 27 }, { delta: 2197, value: 35 }, { delta: 2312, value: 47 }, { delta: 2412, value: 53 }, { delta: 2514, value: 60 }, { delta: 2630, value: 37 }, { delta: 2730, value: 36 }, { delta: 2830, value: 37 }, { delta: 2946, value: 36 }, { delta: 3046, value: 40 }, { delta: 3163, value: 47 }, { delta: 3280, value: 41 }, { delta: 3380, value: 35 }, { delta: 3480, value: 27 }, { delta: 3580, value: 39 }, { delta: 3680, value: 42 }, { delta: 3780, value: 49 }, { delta: 3880, value: 55 }, { delta: 3980, value: 60 }, { delta: 4080, value: 60 }, { delta: 4180, value: 60 }];
-let LineGraphWidget = devtools.require("devtools/shared/widgets/LineGraphWidget");
-let {Promise} = devtools.require("resource://gre/modules/Promise.jsm");
+let LineGraphWidget = require("devtools/shared/widgets/LineGraphWidget");
+let {Promise} = require("resource://gre/modules/Promise.jsm");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   yield performTest();
   gBrowser.removeCurrentTab();
 });
 
 function* performTest() {
--- a/browser/devtools/shared/test/browser_graphs-09b.js
+++ b/browser/devtools/shared/test/browser_graphs-09b.js
@@ -1,16 +1,16 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that line graphs properly use the tooltips configuration properties.
 
 const TEST_DATA = [{ delta: 112, value: 48 }, { delta: 213, value: 59 }, { delta: 313, value: 60 }, { delta: 413, value: 59 }, { delta: 530, value: 59 }, { delta: 646, value: 58 }, { delta: 747, value: 60 }, { delta: 863, value: 48 }, { delta: 980, value: 37 }, { delta: 1097, value: 30 }, { delta: 1213, value: 29 }, { delta: 1330, value: 23 }, { delta: 1430, value: 10 }, { delta: 1534, value: 17 }, { delta: 1645, value: 20 }, { delta: 1746, value: 22 }, { delta: 1846, value: 39 }, { delta: 1963, value: 26 }, { delta: 2080, value: 27 }, { delta: 2197, value: 35 }, { delta: 2312, value: 47 }, { delta: 2412, value: 53 }, { delta: 2514, value: 60 }, { delta: 2630, value: 37 }, { delta: 2730, value: 36 }, { delta: 2830, value: 37 }, { delta: 2946, value: 36 }, { delta: 3046, value: 40 }, { delta: 3163, value: 47 }, { delta: 3280, value: 41 }, { delta: 3380, value: 35 }, { delta: 3480, value: 27 }, { delta: 3580, value: 39 }, { delta: 3680, value: 42 }, { delta: 3780, value: 49 }, { delta: 3880, value: 55 }, { delta: 3980, value: 60 }, { delta: 4080, value: 60 }, { delta: 4180, value: 60 }];
-let LineGraphWidget = devtools.require("devtools/shared/widgets/LineGraphWidget");
-let {Promise} = devtools.require("resource://gre/modules/Promise.jsm");
+let LineGraphWidget = require("devtools/shared/widgets/LineGraphWidget");
+let {Promise} = require("resource://gre/modules/Promise.jsm");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   yield performTest();
   gBrowser.removeCurrentTab();
 });
 
 function* performTest() {
--- a/browser/devtools/shared/test/browser_graphs-09c.js
+++ b/browser/devtools/shared/test/browser_graphs-09c.js
@@ -1,16 +1,16 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that line graphs hide the tooltips when there's no data available.
 
 const TEST_DATA = [];
-let LineGraphWidget = devtools.require("devtools/shared/widgets/LineGraphWidget");
-let {Promise} = devtools.require("resource://gre/modules/Promise.jsm");
+let LineGraphWidget = require("devtools/shared/widgets/LineGraphWidget");
+let {Promise} = require("resource://gre/modules/Promise.jsm");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   yield performTest();
   gBrowser.removeCurrentTab();
 });
 
 function* performTest() {
--- a/browser/devtools/shared/test/browser_graphs-09d.js
+++ b/browser/devtools/shared/test/browser_graphs-09d.js
@@ -1,17 +1,17 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that line graphs hide the 'max' tooltip when the distance between
 // the 'min' and 'max' tooltip is too small.
 
 const TEST_DATA = [{ delta: 100, value: 60 }, { delta: 200, value: 59.9 }];
-let LineGraphWidget = devtools.require("devtools/shared/widgets/LineGraphWidget");
-let {Promise} = devtools.require("resource://gre/modules/Promise.jsm");
+let LineGraphWidget = require("devtools/shared/widgets/LineGraphWidget");
+let {Promise} = require("resource://gre/modules/Promise.jsm");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   yield performTest();
   gBrowser.removeCurrentTab();
 });
 
 function* performTest() {
--- a/browser/devtools/shared/test/browser_graphs-09e.js
+++ b/browser/devtools/shared/test/browser_graphs-09e.js
@@ -2,18 +2,18 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that line graphs hide the gutter and tooltips when there's no data,
 // but show them when there is.
 
 const NO_DATA = [];
 const TEST_DATA = [{ delta: 112, value: 48 }, { delta: 213, value: 59 }, { delta: 313, value: 60 }, { delta: 413, value: 59 }, { delta: 530, value: 59 }, { delta: 646, value: 58 }, { delta: 747, value: 60 }, { delta: 863, value: 48 }, { delta: 980, value: 37 }, { delta: 1097, value: 30 }, { delta: 1213, value: 29 }, { delta: 1330, value: 23 }, { delta: 1430, value: 10 }, { delta: 1534, value: 17 }, { delta: 1645, value: 20 }, { delta: 1746, value: 22 }, { delta: 1846, value: 39 }, { delta: 1963, value: 26 }, { delta: 2080, value: 27 }, { delta: 2197, value: 35 }, { delta: 2312, value: 47 }, { delta: 2412, value: 53 }, { delta: 2514, value: 60 }, { delta: 2630, value: 37 }, { delta: 2730, value: 36 }, { delta: 2830, value: 37 }, { delta: 2946, value: 36 }, { delta: 3046, value: 40 }, { delta: 3163, value: 47 }, { delta: 3280, value: 41 }, { delta: 3380, value: 35 }, { delta: 3480, value: 27 }, { delta: 3580, value: 39 }, { delta: 3680, value: 42 }, { delta: 3780, value: 49 }, { delta: 3880, value: 55 }, { delta: 3980, value: 60 }, { delta: 4080, value: 60 }, { delta: 4180, value: 60 }];
 
-let LineGraphWidget = devtools.require("devtools/shared/widgets/LineGraphWidget");
-let {Promise} = devtools.require("resource://gre/modules/Promise.jsm");
+let LineGraphWidget = require("devtools/shared/widgets/LineGraphWidget");
+let {Promise} = require("resource://gre/modules/Promise.jsm");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   yield performTest();
   gBrowser.removeCurrentTab();
 });
 
 function* performTest() {
--- a/browser/devtools/shared/test/browser_graphs-09f.js
+++ b/browser/devtools/shared/test/browser_graphs-09f.js
@@ -1,17 +1,17 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests the constructor options for `min`, `max` and `avg` on displaying the
 // gutter/tooltips and lines.
 
 const TEST_DATA = [{ delta: 100, value: 60 }, { delta: 200, value: 1 }];
-let LineGraphWidget = devtools.require("devtools/shared/widgets/LineGraphWidget");
-let {Promise} = devtools.require("resource://gre/modules/Promise.jsm");
+let LineGraphWidget = require("devtools/shared/widgets/LineGraphWidget");
+let {Promise} = require("resource://gre/modules/Promise.jsm");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   yield performTest();
   gBrowser.removeCurrentTab();
 });
 
 function* performTest() {
--- a/browser/devtools/shared/test/browser_graphs-10a.js
+++ b/browser/devtools/shared/test/browser_graphs-10a.js
@@ -1,16 +1,16 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that graphs properly handle resizing.
 
 const TEST_DATA = [{ delta: 112, value: 48 }, { delta: 213, value: 59 }, { delta: 313, value: 60 }, { delta: 413, value: 59 }, { delta: 530, value: 59 }, { delta: 646, value: 58 }, { delta: 747, value: 60 }, { delta: 863, value: 48 }, { delta: 980, value: 37 }, { delta: 1097, value: 30 }, { delta: 1213, value: 29 }, { delta: 1330, value: 23 }, { delta: 1430, value: 10 }, { delta: 1534, value: 17 }, { delta: 1645, value: 20 }, { delta: 1746, value: 22 }, { delta: 1846, value: 39 }, { delta: 1963, value: 26 }, { delta: 2080, value: 27 }, { delta: 2197, value: 35 }, { delta: 2312, value: 47 }, { delta: 2412, value: 53 }, { delta: 2514, value: 60 }, { delta: 2630, value: 37 }, { delta: 2730, value: 36 }, { delta: 2830, value: 37 }, { delta: 2946, value: 36 }, { delta: 3046, value: 40 }, { delta: 3163, value: 47 }, { delta: 3280, value: 41 }, { delta: 3380, value: 35 }, { delta: 3480, value: 27 }, { delta: 3580, value: 39 }, { delta: 3680, value: 42 }, { delta: 3780, value: 49 }, { delta: 3880, value: 55 }, { delta: 3980, value: 60 }, { delta: 4080, value: 60 }, { delta: 4180, value: 60 }];
-let LineGraphWidget = devtools.require("devtools/shared/widgets/LineGraphWidget");
-let {Promise} = devtools.require("resource://gre/modules/Promise.jsm");
+let LineGraphWidget = require("devtools/shared/widgets/LineGraphWidget");
+let {Promise} = require("resource://gre/modules/Promise.jsm");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   yield performTest();
   gBrowser.removeCurrentTab();
 });
 
 function* performTest() {
--- a/browser/devtools/shared/test/browser_graphs-10b.js
+++ b/browser/devtools/shared/test/browser_graphs-10b.js
@@ -1,17 +1,17 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that graphs aren't refreshed when the owner window resizes but
 // the graph dimensions stay the same.
 
 const TEST_DATA = [{ delta: 112, value: 48 }, { delta: 213, value: 59 }, { delta: 313, value: 60 }, { delta: 413, value: 59 }, { delta: 530, value: 59 }, { delta: 646, value: 58 }, { delta: 747, value: 60 }, { delta: 863, value: 48 }, { delta: 980, value: 37 }, { delta: 1097, value: 30 }, { delta: 1213, value: 29 }, { delta: 1330, value: 23 }, { delta: 1430, value: 10 }, { delta: 1534, value: 17 }, { delta: 1645, value: 20 }, { delta: 1746, value: 22 }, { delta: 1846, value: 39 }, { delta: 1963, value: 26 }, { delta: 2080, value: 27 }, { delta: 2197, value: 35 }, { delta: 2312, value: 47 }, { delta: 2412, value: 53 }, { delta: 2514, value: 60 }, { delta: 2630, value: 37 }, { delta: 2730, value: 36 }, { delta: 2830, value: 37 }, { delta: 2946, value: 36 }, { delta: 3046, value: 40 }, { delta: 3163, value: 47 }, { delta: 3280, value: 41 }, { delta: 3380, value: 35 }, { delta: 3480, value: 27 }, { delta: 3580, value: 39 }, { delta: 3680, value: 42 }, { delta: 3780, value: 49 }, { delta: 3880, value: 55 }, { delta: 3980, value: 60 }, { delta: 4080, value: 60 }, { delta: 4180, value: 60 }];
-let LineGraphWidget = devtools.require("devtools/shared/widgets/LineGraphWidget");
-let {Promise} = devtools.require("resource://gre/modules/Promise.jsm");
+let LineGraphWidget = require("devtools/shared/widgets/LineGraphWidget");
+let {Promise} = require("resource://gre/modules/Promise.jsm");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   yield performTest();
   gBrowser.removeCurrentTab();
 });
 
 function* performTest() {
--- a/browser/devtools/shared/test/browser_graphs-10c.js
+++ b/browser/devtools/shared/test/browser_graphs-10c.js
@@ -1,14 +1,14 @@
 
 // Tests that graphs properly handle resizing.
 
 const TEST_DATA = [{ delta: 112, value: 48 }, { delta: 213, value: 59 }, { delta: 313, value: 60 }, { delta: 413, value: 59 }, { delta: 530, value: 59 }, { delta: 646, value: 58 }, { delta: 747, value: 60 }, { delta: 863, value: 48 }, { delta: 980, value: 37 }, { delta: 1097, value: 30 }, { delta: 1213, value: 29 }, { delta: 1330, value: 23 }, { delta: 1430, value: 10 }, { delta: 1534, value: 17 }, { delta: 1645, value: 20 }, { delta: 1746, value: 22 }, { delta: 1846, value: 39 }, { delta: 1963, value: 26 }, { delta: 2080, value: 27 }, { delta: 2197, value: 35 }, { delta: 2312, value: 47 }, { delta: 2412, value: 53 }, { delta: 2514, value: 60 }, { delta: 2630, value: 37 }, { delta: 2730, value: 36 }, { delta: 2830, value: 37 }, { delta: 2946, value: 36 }, { delta: 3046, value: 40 }, { delta: 3163, value: 47 }, { delta: 3280, value: 41 }, { delta: 3380, value: 35 }, { delta: 3480, value: 27 }, { delta: 3580, value: 39 }, { delta: 3680, value: 42 }, { delta: 3780, value: 49 }, { delta: 3880, value: 55 }, { delta: 3980, value: 60 }, { delta: 4080, value: 60 }, { delta: 4180, value: 60 }];
-let LineGraphWidget = devtools.require("devtools/shared/widgets/LineGraphWidget");
-let {Promise} = devtools.require("resource://gre/modules/Promise.jsm");
+let LineGraphWidget = require("devtools/shared/widgets/LineGraphWidget");
+let {Promise} = require("resource://gre/modules/Promise.jsm");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   yield performTest();
   gBrowser.removeCurrentTab();
 });
 
 function* performTest() {
--- a/browser/devtools/shared/test/browser_graphs-11a.js
+++ b/browser/devtools/shared/test/browser_graphs-11a.js
@@ -1,15 +1,15 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that bar graph create a legend as expected.
 
-let BarGraphWidget = devtools.require("devtools/shared/widgets/BarGraphWidget");
-let {Promise} = devtools.require("resource://gre/modules/Promise.jsm");
+let BarGraphWidget = require("devtools/shared/widgets/BarGraphWidget");
+let {Promise} = require("resource://gre/modules/Promise.jsm");
 
 const CATEGORIES = [
   { color: "#46afe3", label: "Foo" },
   { color: "#eb5368", label: "Bar" },
   { color: "#70bf53", label: "Baz" }
 ];
 
 add_task(function*() {
--- a/browser/devtools/shared/test/browser_graphs-11b.js
+++ b/browser/devtools/shared/test/browser_graphs-11b.js
@@ -1,15 +1,15 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that bar graph's legend items handle mouseover/mouseout.
 
-let BarGraphWidget = devtools.require("devtools/shared/widgets/BarGraphWidget");
-let {Promise} = devtools.require("resource://gre/modules/Promise.jsm");
+let BarGraphWidget = require("devtools/shared/widgets/BarGraphWidget");
+let {Promise} = require("resource://gre/modules/Promise.jsm");
 
 const CATEGORIES = [
   { color: "#46afe3", label: "Foo" },
   { color: "#eb5368", label: "Bar" },
   { color: "#70bf53", label: "Baz" }
 ];
 
 add_task(function*() {
--- a/browser/devtools/shared/test/browser_graphs-12.js
+++ b/browser/devtools/shared/test/browser_graphs-12.js
@@ -1,17 +1,17 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that canvas graphs can have their selection linked.
 
-let LineGraphWidget = devtools.require("devtools/shared/widgets/LineGraphWidget");
-let BarGraphWidget = devtools.require("devtools/shared/widgets/BarGraphWidget");
-let {CanvasGraphUtils} = devtools.require("devtools/shared/widgets/Graphs");
-let {Promise} = devtools.require("resource://gre/modules/Promise.jsm");
+let LineGraphWidget = require("devtools/shared/widgets/LineGraphWidget");
+let BarGraphWidget = require("devtools/shared/widgets/BarGraphWidget");
+let {CanvasGraphUtils} = require("devtools/shared/widgets/Graphs");
+let {Promise} = require("resource://gre/modules/Promise.jsm");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   yield performTest();
   gBrowser.removeCurrentTab();
 });
 
 function* performTest() {
--- a/browser/devtools/shared/test/browser_graphs-13.js
+++ b/browser/devtools/shared/test/browser_graphs-13.js
@@ -1,15 +1,15 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that graph widgets may have a fixed width or height.
 
-let LineGraphWidget = devtools.require("devtools/shared/widgets/LineGraphWidget");
-let {Promise} = devtools.require("resource://gre/modules/Promise.jsm");
+let LineGraphWidget = require("devtools/shared/widgets/LineGraphWidget");
+let {Promise} = require("resource://gre/modules/Promise.jsm");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   yield performTest();
   gBrowser.removeCurrentTab();
 });
 
 function* performTest() {
--- a/browser/devtools/shared/test/browser_graphs-14.js
+++ b/browser/devtools/shared/test/browser_graphs-14.js
@@ -1,16 +1,16 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that graph widgets correctly emit mouse input events.
 
 const TEST_DATA = [{ delta: 112, value: 48 }, { delta: 213, value: 59 }, { delta: 313, value: 60 }, { delta: 413, value: 59 }, { delta: 530, value: 59 }, { delta: 646, value: 58 }, { delta: 747, value: 60 }, { delta: 863, value: 48 }, { delta: 980, value: 37 }, { delta: 1097, value: 30 }, { delta: 1213, value: 29 }, { delta: 1330, value: 23 }, { delta: 1430, value: 10 }, { delta: 1534, value: 17 }, { delta: 1645, value: 20 }, { delta: 1746, value: 22 }, { delta: 1846, value: 39 }, { delta: 1963, value: 26 }, { delta: 2080, value: 27 }, { delta: 2197, value: 35 }, { delta: 2312, value: 47 }, { delta: 2412, value: 53 }, { delta: 2514, value: 60 }, { delta: 2630, value: 37 }, { delta: 2730, value: 36 }, { delta: 2830, value: 37 }, { delta: 2946, value: 36 }, { delta: 3046, value: 40 }, { delta: 3163, value: 47 }, { delta: 3280, value: 41 }, { delta: 3380, value: 35 }, { delta: 3480, value: 27 }, { delta: 3580, value: 39 }, { delta: 3680, value: 42 }, { delta: 3780, value: 49 }, { delta: 3880, value: 55 }, { delta: 3980, value: 60 }, { delta: 4080, value: 60 }, { delta: 4180, value: 60 }];
-let LineGraphWidget = devtools.require("devtools/shared/widgets/LineGraphWidget");
-let {Promise} = devtools.require("resource://gre/modules/Promise.jsm");
+let LineGraphWidget = require("devtools/shared/widgets/LineGraphWidget");
+let {Promise} = require("resource://gre/modules/Promise.jsm");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   yield performTest();
   gBrowser.removeCurrentTab();
 });
 
 function* performTest() {
--- a/browser/devtools/shared/test/browser_graphs-15.js
+++ b/browser/devtools/shared/test/browser_graphs-15.js
@@ -15,18 +15,18 @@ let t = 0;
 for (let frameRate of FRAMES) {
   for (let i = 0; i < frameRate; i++) {
     let delta = Math.floor(1000 / frameRate); // Duration between frames at this rate
     t += delta;
     TEST_DATA.push(t);
   }
 }
 
-let LineGraphWidget = devtools.require("devtools/shared/widgets/LineGraphWidget");
-let {Promise} = devtools.require("resource://gre/modules/Promise.jsm");
+let LineGraphWidget = require("devtools/shared/widgets/LineGraphWidget");
+let {Promise} = require("resource://gre/modules/Promise.jsm");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   yield performTest();
   gBrowser.removeCurrentTab();
 });
 
 function* performTest() {
--- a/browser/devtools/shared/test/browser_graphs-16.js
+++ b/browser/devtools/shared/test/browser_graphs-16.js
@@ -1,15 +1,15 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that mounta graphs work as expected.
 
-let MountainGraphWidget = devtools.require("devtools/shared/widgets/MountainGraphWidget");
-let {Promise} = devtools.require("resource://gre/modules/Promise.jsm");
+let MountainGraphWidget = require("devtools/shared/widgets/MountainGraphWidget");
+let {Promise} = require("resource://gre/modules/Promise.jsm");
 
 const TEST_DATA = [
   { delta: 0, values: [0.1, 0.5, 0.3] },
   { delta: 1, values: [0.25, 0, 0.5] },
   { delta: 2, values: [0.5, 0.25, 0.1] },
   { delta: 3, values: [0, 0.75, 0] },
   { delta: 4, values: [0.75, 0, 0.25] }
 ];
--- a/browser/devtools/shared/test/browser_inplace-editor-01.js
+++ b/browser/devtools/shared/test/browser_inplace-editor-01.js
@@ -1,16 +1,16 @@
 /* vim: set ts=2 et sw=2 tw=80: */
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 let {Promise: promise} = Cu.import("resource://gre/modules/Promise.jsm", {});
-let {editableField, getInplaceEditorForSpan: inplaceEditor} = devtools.require("devtools/shared/inplace-editor");
+let {editableField, getInplaceEditorForSpan: inplaceEditor} = require("devtools/shared/inplace-editor");
 
 // Test the inplace-editor behavior.
 
 add_task(function*() {
   yield promiseTab("data:text/html;charset=utf-8,inline editor tests");
   let [host, win, doc] = yield createHost();
 
   yield testMultipleInitialization(doc);
--- a/browser/devtools/shared/test/browser_inplace-editor-02.js
+++ b/browser/devtools/shared/test/browser_inplace-editor-02.js
@@ -1,16 +1,16 @@
 /* vim: set ts=2 et sw=2 tw=80: */
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 let {Promise: promise} = Cu.import("resource://gre/modules/Promise.jsm", {});
-let {editableField, getInplaceEditorForSpan: inplaceEditor} = devtools.require("devtools/shared/inplace-editor");
+let {editableField, getInplaceEditorForSpan: inplaceEditor} = require("devtools/shared/inplace-editor");
 
 // Test that the trimOutput option for the inplace editor works correctly.
 
 add_task(function*() {
   yield promiseTab("data:text/html;charset=utf-8,inline editor tests");
   let [host, win, doc] = yield createHost();
 
   yield testNonTrimmed(doc);
--- a/browser/devtools/shared/test/browser_mdn-docs-01.js
+++ b/browser/devtools/shared/test/browser_mdn-docs-01.js
@@ -16,17 +16,17 @@
  * In this file we test:
  * - the initial state of the document before the docs have loaded
  * - the state of the document after the docs have loaded
  */
 
 "use strict";
 
 const {CssDocsTooltip} = require("devtools/shared/widgets/Tooltip");
-const {setBaseCssDocsUrl, MdnDocsWidget} = devtools.require("devtools/shared/widgets/MdnDocsWidget");
+const {setBaseCssDocsUrl, MdnDocsWidget} = require("devtools/shared/widgets/MdnDocsWidget");
 const {Promise: promise} = Cu.import("resource://gre/modules/Promise.jsm", {});
 
 // frame to load the tooltip into
 const MDN_DOCS_TOOLTIP_FRAME = "chrome://browser/content/devtools/mdn-docs-frame.xhtml";
 
 /**
  * Test properties
  *
--- a/browser/devtools/shared/test/browser_mdn-docs-02.js
+++ b/browser/devtools/shared/test/browser_mdn-docs-02.js
@@ -17,17 +17,17 @@
  *
  * We also test that the tooltip properly handles the case where the page
  * doesn't exist at all.
  */
 
 "use strict";
 
 const {CssDocsTooltip} = require("devtools/shared/widgets/Tooltip");
-const {setBaseCssDocsUrl, MdnDocsWidget} = devtools.require("devtools/shared/widgets/MdnDocsWidget");
+const {setBaseCssDocsUrl, MdnDocsWidget} = require("devtools/shared/widgets/MdnDocsWidget");
 
 // frame to load the tooltip into
 const MDN_DOCS_TOOLTIP_FRAME = "chrome://browser/content/devtools/mdn-docs-frame.xhtml";
 
 const BASIC_EXPECTED_SUMMARY = "A summary of the property.";
 const BASIC_EXPECTED_SYNTAX = [{type: "comment",        text: "/* The part we want   */"},
                                {type: "text",           text: "\n"},
                                {type: "property-name",  text: "this"},
--- a/browser/devtools/shared/test/browser_mdn-docs-03.js
+++ b/browser/devtools/shared/test/browser_mdn-docs-03.js
@@ -19,17 +19,17 @@
  * that it expects to get from the syntax highlighter.
  *
  * It then calls the syntax highlighter, and checks that the resulting
  * collection of DOM nodes is what we expected.
  */
 
 "use strict";
 
-const {appendSyntaxHighlightedCSS} = devtools.require("devtools/shared/widgets/MdnDocsWidget");
+const {appendSyntaxHighlightedCSS} = require("devtools/shared/widgets/MdnDocsWidget");
 
 /**
  * An array containing the actual test cases.
  *
  * The test code tests every case in the array. If you want to add more
  * test cases, just add more items to the array.
  *
  * Each test case consists of:
--- a/browser/devtools/shared/test/browser_observableobject.js
+++ b/browser/devtools/shared/test/browser_observableobject.js
@@ -1,15 +1,14 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 function test() {
-  let tmp = {};
-  Cu.import("resource://gre/modules/devtools/Loader.jsm", tmp);
-  let ObservableObject = tmp.devtools.require("devtools/shared/observable-object");
+  let {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
+  let ObservableObject = require("devtools/shared/observable-object");
 
   let rawObject = {};
   let oe = new ObservableObject(rawObject);
 
   function str(o) {
     return JSON.stringify(o);
   }
 
--- a/browser/devtools/shared/test/browser_options-view-01.js
+++ b/browser/devtools/shared/test/browser_options-view-01.js
@@ -1,15 +1,15 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that options-view OptionsView responds to events correctly.
 
-const {OptionsView} = devtools.require("devtools/shared/options-view");
-const {Services} = devtools.require("resource://gre/modules/Services.jsm");
+const {OptionsView} = require("devtools/shared/options-view");
+const {Services} = require("resource://gre/modules/Services.jsm");
 
 const BRANCH = "devtools.debugger.";
 const BLACK_BOX_PREF = "auto-black-box";
 const PRETTY_PRINT_PREF = "auto-pretty-print";
 
 let originalBlackBox = Services.prefs.getBoolPref(BRANCH + BLACK_BOX_PREF);
 let originalPrettyPrint = Services.prefs.getBoolPref(BRANCH + PRETTY_PRINT_PREF);
 
--- a/browser/devtools/shared/test/browser_outputparser.js
+++ b/browser/devtools/shared/test/browser_outputparser.js
@@ -1,17 +1,17 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 let {Services} = Cu.import("resource://gre/modules/Services.jsm", {});
 let {Loader} = Cu.import("resource://gre/modules/commonjs/toolkit/loader.js",
                          {});
-let {OutputParser} = devtools.require("devtools/output-parser");
+let {OutputParser} = require("devtools/output-parser");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   yield performTest();
   gBrowser.removeCurrentTab();
 });
 
 function* performTest() {
--- a/browser/devtools/shared/test/browser_poller.js
+++ b/browser/devtools/shared/test/browser_poller.js
@@ -1,14 +1,14 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests the Poller class.
 
-const { Poller } = devtools.require("devtools/shared/poller");
+const { Poller } = require("devtools/shared/poller");
 
 add_task(function* () {
   let count1 = 0, count2 = 0, count3 = 0;
 
   let poller1 = new Poller(function () {
     count1++;
   }, 1000000000, true);
   let poller2 = new Poller(function () {
--- a/browser/devtools/shared/test/browser_spectrum.js
+++ b/browser/devtools/shared/test/browser_spectrum.js
@@ -1,16 +1,16 @@
 /* vim: set ts=2 et sw=2 tw=80: */
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that the spectrum color picker works correctly
 
 const TEST_URI = "chrome://browser/content/devtools/spectrum-frame.xhtml";
-const {Spectrum} = devtools.require("devtools/shared/widgets/Spectrum");
+const {Spectrum} = require("devtools/shared/widgets/Spectrum");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   yield performTest();
   gBrowser.removeCurrentTab();
 });
 
 function* performTest() {
--- a/browser/devtools/shared/test/browser_tableWidget_basic.js
+++ b/browser/devtools/shared/test/browser_tableWidget_basic.js
@@ -7,17 +7,17 @@
 const TEST_URI = "data:text/xml;charset=UTF-8,<?xml version='1.0'?>" +
   "<?xml-stylesheet href='chrome://global/skin/global.css'?>" +
   "<?xml-stylesheet href='chrome://browser/skin/devtools/common.css'?>" +
   "<?xml-stylesheet href='chrome://browser/skin/devtools/widgets.css'?>" +
   "<window xmlns='http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul'" +
   " title='Table Widget' width='600' height='500'><box flex='1'/></window>";
 const TEST_OPT = "chrome,titlebar,toolbar,centerscreen,resizable,dialog=no";
 
-const {TableWidget} = devtools.require("devtools/shared/widgets/TableWidget");
+const {TableWidget} = require("devtools/shared/widgets/TableWidget");
 
 let doc, table;
 
 function test() {
   waitForExplicitFinish();
   let win = Services.ww.openWindow(null, TEST_URI, "_blank", TEST_OPT, null);
 
   win.addEventListener("load", function onLoad() {
--- a/browser/devtools/shared/test/browser_tableWidget_keyboard_interaction.js
+++ b/browser/devtools/shared/test/browser_tableWidget_keyboard_interaction.js
@@ -7,19 +7,19 @@
 const TEST_URI = "data:text/xml;charset=UTF-8,<?xml version='1.0'?>" +
   "<?xml-stylesheet href='chrome://global/skin/global.css'?>" +
   "<?xml-stylesheet href='chrome://browser/skin/devtools/common.css'?>" +
   "<?xml-stylesheet href='chrome://browser/skin/devtools/widgets.css'?>" +
   "<window xmlns='http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul'" +
   " title='Table Widget' width='600' height='500'><box flex='1'/></window>";
 const TEST_OPT = "chrome,titlebar,toolbar,centerscreen,resizable,dialog=no";
 
-const {TableWidget} = devtools.require("devtools/shared/widgets/TableWidget");
-let {Task} = devtools.require("resource://gre/modules/Task.jsm");
-let {Promise} = devtools.require("resource://gre/modules/Promise.jsm");
+const {TableWidget} = require("devtools/shared/widgets/TableWidget");
+let {Task} = require("resource://gre/modules/Task.jsm");
+let {Promise} = require("resource://gre/modules/Promise.jsm");
 
 let doc, table;
 
 function test() {
   waitForExplicitFinish();
   let win = Services.ww.openWindow(null, TEST_URI, "_blank", TEST_OPT, null);
 
   win.addEventListener("load", function onLoad() {
--- a/browser/devtools/shared/test/browser_tableWidget_mouse_interaction.js
+++ b/browser/devtools/shared/test/browser_tableWidget_mouse_interaction.js
@@ -7,19 +7,19 @@
 const TEST_URI = "data:text/xml;charset=UTF-8,<?xml version='1.0'?>" +
   "<?xml-stylesheet href='chrome://global/skin/global.css'?>" +
   "<?xml-stylesheet href='chrome://browser/skin/devtools/common.css'?>" +
   "<?xml-stylesheet href='chrome://browser/skin/devtools/widgets.css'?>" +
   "<window xmlns='http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul'" +
   " title='Table Widget' width='600' height='500'><box flex='1'/></window>";
 const TEST_OPT = "chrome,titlebar,toolbar,centerscreen,resizable,dialog=no";
 
-const {TableWidget} = devtools.require("devtools/shared/widgets/TableWidget");
-let {Task} = devtools.require("resource://gre/modules/Task.jsm");
-let {Promise} = devtools.require("resource://gre/modules/Promise.jsm");
+const {TableWidget} = require("devtools/shared/widgets/TableWidget");
+let {Task} = require("resource://gre/modules/Task.jsm");
+let {Promise} = require("resource://gre/modules/Promise.jsm");
 
 let doc, table;
 
 function test() {
   waitForExplicitFinish();
   let win = Services.ww.openWindow(null, TEST_URI, "_blank", TEST_OPT, null);
 
   win.addEventListener("load", function onLoad() {
--- a/browser/devtools/shared/test/browser_theme.js
+++ b/browser/devtools/shared/test/browser_theme.js
@@ -1,15 +1,15 @@
 /* vim: set ts=2 et sw=2 tw=80: */
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that theme utilities work
 
-let {getColor, getTheme, setTheme} = devtools.require("devtools/shared/theme");
+let {getColor, getTheme, setTheme} = require("devtools/shared/theme");
 
 function test() {
   testGetTheme();
   testSetTheme();
   testGetColor();
   testColorExistence();
 }
 
--- a/browser/devtools/shared/test/browser_treeWidget_basic.js
+++ b/browser/devtools/shared/test/browser_treeWidget_basic.js
@@ -3,17 +3,17 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that the tree widget api works fine
 
 const TEST_URI = "data:text/html;charset=utf-8,<head><link rel='stylesheet' " +
   "type='text/css' href='chrome://browser/skin/devtools/common.css'><link " +
   "rel='stylesheet' type='text/css' href='chrome://browser/skin/devtools/widg" +
   "ets.css'></head><body><div></div><span></span></body>";
-const {TreeWidget} = devtools.require("devtools/shared/widgets/TreeWidget");
+const {TreeWidget} = require("devtools/shared/widgets/TreeWidget");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   let [host, win, doc] = yield createHost("bottom", TEST_URI);
 
   let tree = new TreeWidget(doc.querySelector("div"), {
     defaultType: "store"
   });
--- a/browser/devtools/shared/test/browser_treeWidget_keyboard_interaction.js
+++ b/browser/devtools/shared/test/browser_treeWidget_keyboard_interaction.js
@@ -3,18 +3,18 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that keyboard interaction works fine with the tree widget
 
 const TEST_URI = "data:text/html;charset=utf-8,<head><link rel='stylesheet' " +
   "type='text/css' href='chrome://browser/skin/devtools/common.css'><link " +
   "rel='stylesheet' type='text/css' href='chrome://browser/skin/devtools/widg" +
   "ets.css'></head><body><div></div><span></span></body>";
-const {TreeWidget} = devtools.require("devtools/shared/widgets/TreeWidget");
-const {Promise} = devtools.require("resource://gre/modules/Promise.jsm");
+const {TreeWidget} = require("devtools/shared/widgets/TreeWidget");
+const {Promise} = require("resource://gre/modules/Promise.jsm");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   let [host, win, doc] = yield createHost("bottom", TEST_URI);
 
   let tree = new TreeWidget(doc.querySelector("div"), {
     defaultType: "store"
   });
--- a/browser/devtools/shared/test/browser_treeWidget_mouse_interaction.js
+++ b/browser/devtools/shared/test/browser_treeWidget_mouse_interaction.js
@@ -3,18 +3,18 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that mouse interaction works fine with tree widget
 
 const TEST_URI = "data:text/html;charset=utf-8,<head><link rel='stylesheet' " +
   "type='text/css' href='chrome://browser/skin/devtools/common.css'><link " +
   "rel='stylesheet' type='text/css' href='chrome://browser/skin/devtools/widg" +
   "ets.css'></head><body><div></div><span></span></body>";
-const {TreeWidget} = devtools.require("devtools/shared/widgets/TreeWidget");
-const {Promise} = devtools.require("resource://gre/modules/Promise.jsm");
+const {TreeWidget} = require("devtools/shared/widgets/TreeWidget");
+const {Promise} = require("resource://gre/modules/Promise.jsm");
 
 add_task(function*() {
   yield promiseTab("about:blank");
   let [host, win, doc] = yield createHost("bottom", TEST_URI);
 
   let tree = new TreeWidget(doc.querySelector("div"), {
     defaultType: "store"
   });
--- a/browser/devtools/shared/test/head.js
+++ b/browser/devtools/shared/test/head.js
@@ -1,14 +1,14 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
-let {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
-let {TargetFactory, require} = devtools;
+let {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
+let {TargetFactory} = require("devtools/framework/target");
 let {console} = Cu.import("resource://gre/modules/devtools/Console.jsm", {});
 let {gDevTools} = Cu.import("resource:///modules/devtools/gDevTools.jsm", {});
 const {DOMHelpers} = Cu.import("resource:///modules/devtools/DOMHelpers.jsm", {});
 const {Hosts} = require("devtools/framework/toolbox-hosts");
 const {defer} = require("sdk/core/promise");
 const DevToolsUtils = require("devtools/toolkit/DevToolsUtils");
 
 DevToolsUtils.testing = true;
@@ -246,17 +246,17 @@ function* openAndCloseToolbox(nbOfTimes,
     yield gDevTools.closeToolbox(target);
   }
 }
 
 /**
  * Synthesize a profile for testing.
  */
 function synthesizeProfileForTest(samples) {
-  const RecordingUtils = devtools.require("devtools/performance/recording-utils");
+  const RecordingUtils = require("devtools/performance/recording-utils");
 
   samples.unshift({
     time: 0,
     frames: []
   });
 
   let uniqueStacks = new RecordingUtils.UniqueStacks();
   return RecordingUtils.deflateThread({
--- a/browser/devtools/shared/test/unit/test_VariablesView_getString_promise.js
+++ b/browser/devtools/shared/test/unit/test_VariablesView_getString_promise.js
@@ -1,15 +1,14 @@
 /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
 /* vim: set ts=2 et sw=2 tw=80: */
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 const Cu = Components.utils;
-const { devtools } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 const { VariablesView } = Cu.import("resource:///modules/devtools/VariablesView.jsm", {});
 
 const PENDING = {
   "type": "object",
   "class": "Promise",
   "actor": "conn0.pausedobj35",
   "extensible": true,
   "frozen": false,
--- a/browser/devtools/shared/test/unit/test_advanceValidate.js
+++ b/browser/devtools/shared/test/unit/test_advanceValidate.js
@@ -4,18 +4,17 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 // Tests the advanceValidate function from rule-view.js.
 
 const Cu = Components.utils;
 const Ci = Components.interfaces;
-let {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
-let require = devtools.require;
+let {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 let {_advanceValidate} = require("devtools/styleinspector/rule-view");
 
 //                            1         2         3
 //                  0123456789012345678901234567890
 let sampleInput = '\\symbol "string" url(somewhere)';
 
 function testInsertion(where, result, testName) {
   do_print(testName);
--- a/browser/devtools/shared/test/unit/test_attribute-parsing-01.js
+++ b/browser/devtools/shared/test/unit/test_attribute-parsing-01.js
@@ -1,16 +1,15 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Test splitBy from node-attribute-parser.js
 
 const Cu = Components.utils;
-let {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
-let require = devtools.require;
+let {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 const {splitBy} = require("devtools/shared/node-attribute-parser");
 
 const TEST_DATA = [{
   value: "this is a test",
   splitChar: " ",
   expected: [
     {value: "this"},
     {value: " ", type: "string"},
--- a/browser/devtools/shared/test/unit/test_attribute-parsing-02.js
+++ b/browser/devtools/shared/test/unit/test_attribute-parsing-02.js
@@ -1,16 +1,15 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Test parseAttribute from node-attribute-parser.js
 
 const Cu = Components.utils;
-let {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
-let require = devtools.require;
+let {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 const {parseAttribute} = require("devtools/shared/node-attribute-parser");
 
 const TEST_DATA = [{
   tagName: "body",
   namespaceURI: "http://www.w3.org/1999/xhtml",
   attributeName: "class",
   attributeValue: "some css class names",
   expected: [
--- a/browser/devtools/shared/test/unit/test_bezierCanvas.js
+++ b/browser/devtools/shared/test/unit/test_bezierCanvas.js
@@ -3,18 +3,17 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 // Tests the BezierCanvas API in the CubicBezierWidget module
 
 const Cu = Components.utils;
-let {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
-let require = devtools.require;
+let {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 let {CubicBezier, BezierCanvas} = require("devtools/shared/widgets/CubicBezierWidget");
 
 function run_test() {
   offsetsGetterReturnsData();
   convertsOffsetsToCoordinates();
   plotsCanvas();
 }
 
--- a/browser/devtools/shared/test/unit/test_cubicBezier.js
+++ b/browser/devtools/shared/test/unit/test_cubicBezier.js
@@ -3,18 +3,17 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 // Tests the CubicBezier API in the CubicBezierWidget module
 
 const Cu = Components.utils;
-let {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
-let require = devtools.require;
+let {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 let {CubicBezier, _parseTimingFunction} = require("devtools/shared/widgets/CubicBezierWidget");
 
 function run_test() {
   throwsWhenMissingCoordinates();
   throwsWhenIncorrectCoordinates();
   convertsStringCoordinates();
   coordinatesToStringOutputsAString();
   pointGettersReturnPointCoordinatesArrays();
--- a/browser/devtools/shared/theme-switching.js
+++ b/browser/devtools/shared/theme-switching.js
@@ -99,18 +99,18 @@
       switchTheme(data.newValue, data.oldValue);
     }
   }
 
   const { classes: Cc, interfaces: Ci, utils: Cu } = Components;
 
   Cu.import("resource://gre/modules/Services.jsm");
   Cu.import("resource:///modules/devtools/gDevTools.jsm");
-  const {devtools} = Components.utils.import("resource://gre/modules/devtools/Loader.jsm", {});
-  const StylesheetUtils = devtools.require("sdk/stylesheet/utils");
+  const {require} = Components.utils.import("resource://gre/modules/devtools/Loader.jsm", {});
+  const StylesheetUtils = require("sdk/stylesheet/utils");
 
   if (documentElement.hasAttribute("force-theme")) {
     switchTheme(documentElement.getAttribute("force-theme"));
   } else {
     switchTheme(Services.prefs.getCharPref("devtools.theme"));
 
     gDevTools.on("pref-changed", handlePrefChange);
     window.addEventListener("unload", function() {
--- a/browser/devtools/shared/widgets/Tooltip.js
+++ b/browser/devtools/shared/widgets/Tooltip.js
@@ -14,19 +14,18 @@ const {CubicBezierWidget} =
       require("devtools/shared/widgets/CubicBezierWidget");
 const {MdnDocsWidget} = require("devtools/shared/widgets/MdnDocsWidget");
 const {CSSFilterEditorWidget} = require("devtools/shared/widgets/FilterWidget");
 const EventEmitter = require("devtools/toolkit/event-emitter");
 const {colorUtils} = require("devtools/css-color");
 const Heritage = require("sdk/core/heritage");
 const {Eyedropper} = require("devtools/eyedropper/eyedropper");
 const Editor = require("devtools/sourceeditor/editor");
-const {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 
-devtools.lazyRequireGetter(this, "beautify", "devtools/jsbeautify");
+loader.lazyRequireGetter(this, "beautify", "devtools/jsbeautify");
 
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 
 XPCOMUtils.defineLazyModuleGetter(this, "setNamedTimeout",
   "resource:///modules/devtools/ViewHelpers.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "clearNamedTimeout",
   "resource:///modules/devtools/ViewHelpers.jsm");
--- a/browser/devtools/shared/widgets/VariablesView.jsm
+++ b/browser/devtools/shared/widgets/VariablesView.jsm
@@ -16,39 +16,39 @@ const PAGE_SIZE_SCROLL_HEIGHT_RATIO = 10
 const PAGE_SIZE_MAX_JUMPS = 30;
 const SEARCH_ACTION_MAX_DELAY = 300; // ms
 const ITEM_FLASH_DURATION = 300 // ms
 
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 Cu.import("resource:///modules/devtools/ViewHelpers.jsm");
 Cu.import("resource://gre/modules/devtools/event-emitter.js");
-const { devtools } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
-const DevToolsUtils = devtools.require("devtools/toolkit/DevToolsUtils");
+const { require } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
+const DevToolsUtils = require("devtools/toolkit/DevToolsUtils");
 Cu.import("resource://gre/modules/Task.jsm");
 let {Promise: promise} = Cu.import("resource://gre/modules/Promise.jsm", {});
 
 XPCOMUtils.defineLazyModuleGetter(this, "PluralForm",
   "resource://gre/modules/PluralForm.jsm");
 
 XPCOMUtils.defineLazyServiceGetter(this, "clipboardHelper",
   "@mozilla.org/widget/clipboardhelper;1",
   "nsIClipboardHelper");
 
 Object.defineProperty(this, "WebConsoleUtils", {
   get: function() {
-    return devtools.require("devtools/toolkit/webconsole/utils").Utils;
+    return require("devtools/toolkit/webconsole/utils").Utils;
   },
   configurable: true,
   enumerable: true
 });
 
 Object.defineProperty(this, "NetworkHelper", {
   get: function() {
-    return devtools.require("devtools/toolkit/webconsole/network-helper");
+    return require("devtools/toolkit/webconsole/network-helper");
   },
   configurable: true,
   enumerable: true
 });
 
 this.EXPORTED_SYMBOLS = ["VariablesView", "escapeHTML"];
 
 /**
--- a/browser/devtools/shared/widgets/VariablesViewController.jsm
+++ b/browser/devtools/shared/widgets/VariablesViewController.jsm
@@ -7,23 +7,21 @@
 
 const { classes: Cc, interfaces: Ci, utils: Cu } = Components;
 
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 let {Promise: promise} = Cu.import("resource://gre/modules/Promise.jsm", {});
 Cu.import("resource:///modules/devtools/VariablesView.jsm");
 Cu.import("resource:///modules/devtools/ViewHelpers.jsm");
-
-XPCOMUtils.defineLazyModuleGetter(this, "devtools",
-  "resource://gre/modules/devtools/Loader.jsm");
+let {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 
 Object.defineProperty(this, "WebConsoleUtils", {
   get: function() {
-    return devtools.require("devtools/toolkit/webconsole/utils").Utils;
+    return require("devtools/toolkit/webconsole/utils").Utils;
   },
   configurable: true,
   enumerable: true
 });
 
 XPCOMUtils.defineLazyGetter(this, "VARIABLES_SORTING_ENABLED", () =>
   Services.prefs.getBoolPref("devtools.debugger.ui.variables-sorting-enabled")
 );
--- a/browser/devtools/shared/widgets/ViewHelpers.jsm
+++ b/browser/devtools/shared/widgets/ViewHelpers.jsm
@@ -11,18 +11,18 @@ const Cu = Components.utils;
 
 const PANE_APPEARANCE_DELAY = 50;
 const PAGE_SIZE_ITEM_COUNT_RATIO = 5;
 const WIDGET_FOCUSABLE_NODES = new Set(["vbox", "hbox"]);
 
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 Cu.import("resource://gre/modules/Timer.jsm");
-const { devtools } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
-const DevToolsUtils = devtools.require("devtools/toolkit/DevToolsUtils");
+const { require } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
+const DevToolsUtils = require("devtools/toolkit/DevToolsUtils");
 Cu.import("resource://gre/modules/devtools/event-emitter.js");
 
 this.EXPORTED_SYMBOLS = [
   "Heritage", "ViewHelpers", "WidgetMethods",
   "setNamedTimeout", "clearNamedTimeout",
   "setConditionalTimeout", "clearConditionalTimeout",
 ];
 
--- a/browser/devtools/sourceeditor/test/browser_css_autocompletion.js
+++ b/browser/devtools/sourceeditor/test/browser_css_autocompletion.js
@@ -1,16 +1,17 @@
 /* vim: set ts=2 et sw=2 tw=80: */
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 const cssAutoCompleter  = require("devtools/sourceeditor/css-autocompleter");
 const {InspectorFront} = require("devtools/server/actors/inspector");
+const {TargetFactory} = require("devtools/framework/target");
 const { Cc, Ci } = require("chrome");
 
 const CSS_URI = "http://mochi.test:8888/browser/browser/devtools/sourceeditor" +
                 "/test/css_statemachine_testcases.css";
 const TESTS_URI = "http://mochi.test:8888/browser/browser/devtools/sourceeditor" +
                   "/test/css_autocompletion_tests.json";
 
 const source = read(CSS_URI);
@@ -85,17 +86,17 @@ function test() {
     runTests();
   }, true);
   content.location = TEST_URI;
 }
 
 function runTests() {
   progress = doc.getElementById("progress");
   progressDiv = doc.querySelector("#progress > div");
-  let target = devtools.TargetFactory.forTab(gBrowser.selectedTab);
+  let target = TargetFactory.forTab(gBrowser.selectedTab);
   target.makeRemote().then(() => {
     inspector = InspectorFront(target.client, target.form);
     inspector.getWalker().then(walker => {
       completer = new cssAutoCompleter({walker: walker});
       checkStateAndMoveOn();
     });
   });
 }
--- a/browser/devtools/sourceeditor/test/browser_editor_autocomplete_events.js
+++ b/browser/devtools/sourceeditor/test/browser_editor_autocomplete_events.js
@@ -1,27 +1,28 @@
 /* vim: set ts=2 et sw=2 tw=80: */
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 const {InspectorFront} = require("devtools/server/actors/inspector");
+const {TargetFactory} = require("devtools/framework/target");
 const AUTOCOMPLETION_PREF = "devtools.editor.autocomplete";
 const TEST_URI = "data:text/html;charset=UTF-8,<html><body><bar></bar><div id='baz'></div><body></html>";
 
 const wait = (delay) => new Promise(resolve => setTimeout(resolve, delay));
 
 add_task(function*() {
   yield promiseTab(TEST_URI);
   yield runTests();
 });
 
 function* runTests() {
-  let target = devtools.TargetFactory.forTab(gBrowser.selectedTab);
+  let target = TargetFactory.forTab(gBrowser.selectedTab);
   yield target.makeRemote();
   let inspector = InspectorFront(target.client, target.form);
   let walker = yield inspector.getWalker();
   let {ed, win, edWin} = yield setup(null, {
     autocomplete: true,
     mode: Editor.modes.css,
     autocompleteOpts: {walker: walker}
   });
--- a/browser/devtools/sourceeditor/test/head.js
+++ b/browser/devtools/sourceeditor/test/head.js
@@ -1,16 +1,15 @@
 /* vim: set ts=2 et sw=2 tw=80: */
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
-const { devtools } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
-const { require } = devtools;
+const { require } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 const Editor  = require("devtools/sourceeditor/editor");
 const {Promise: promise} = Cu.import("resource://gre/modules/Promise.jsm", {});
 const DevToolsUtils = require("devtools/toolkit/DevToolsUtils");
 
 DevToolsUtils.testing = true;
 SimpleTest.registerCleanupFunction(() => {
   DevToolsUtils.testing = false;
 });
--- a/browser/devtools/storage/test/head.js
+++ b/browser/devtools/storage/test/head.js
@@ -1,22 +1,17 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 "use strict";
 
-let tempScope = {};
-Cu.import("resource://gre/modules/devtools/Loader.jsm", tempScope);
-Cu.import("resource://gre/modules/devtools/Console.jsm", tempScope);
-const console = tempScope.console;
-const devtools = tempScope.devtools;
-tempScope = null;
-const require = devtools.require;
-const TargetFactory = devtools.TargetFactory;
+let { require } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
+let { TargetFactory } = require("devtools/framework/target");
+let { console } = Cu.import("resource://gre/modules/devtools/Console.jsm", {});
 
 const SPLIT_CONSOLE_PREF = "devtools.toolbox.splitconsoleEnabled";
 const STORAGE_PREF = "devtools.storage.enabled";
 const PATH = "browser/browser/devtools/storage/test/";
 const MAIN_DOMAIN = "http://test1.example.org/" + PATH;
 const ALT_DOMAIN = "http://sectest1.example.org/" + PATH;
 const ALT_DOMAIN_SECURED = "https://sectest1.example.org:443/" + PATH;
 
--- a/browser/devtools/styleeditor/StyleEditorUI.jsm
+++ b/browser/devtools/styleeditor/StyleEditorUI.jsm
@@ -21,17 +21,17 @@ Cu.import("resource:///modules/devtools/
 Cu.import("resource:///modules/devtools/StyleEditorUtil.jsm");
 Cu.import("resource:///modules/devtools/SplitView.jsm");
 Cu.import("resource:///modules/devtools/StyleSheetEditor.jsm");
 const { Promise: promise } = Cu.import("resource://gre/modules/Promise.jsm", {});
 
 XPCOMUtils.defineLazyModuleGetter(this, "PluralForm",
                                   "resource://gre/modules/PluralForm.jsm");
 
-const require = Cu.import("resource://gre/modules/devtools/Loader.jsm", {}).devtools.require;
+const { require } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 const { PrefObserver, PREF_ORIG_SOURCES } = require("devtools/styleeditor/utils");
 const csscoverage = require("devtools/server/actors/csscoverage");
 const console = require("resource://gre/modules/devtools/Console.jsm").console;
 
 const LOAD_ERROR = "error-load";
 const STYLE_EDITOR_TEMPLATE = "stylesheet";
 const SELECTOR_HIGHLIGHTER_TYPE = "SelectorHighlighter";
 const PREF_MEDIA_SIDEBAR = "devtools.styleeditor.showMediaSidebar";
--- a/browser/devtools/styleeditor/StyleEditorUtil.jsm
+++ b/browser/devtools/styleeditor/StyleEditorUtil.jsm
@@ -17,17 +17,17 @@ this.EXPORTED_SYMBOLS = [
 const Cc = Components.classes;
 const Ci = Components.interfaces;
 const Cu = Components.utils;
 
 Cu.import("resource://gre/modules/Services.jsm");
 
 const PROPERTIES_URL = "chrome://browser/locale/devtools/styleeditor.properties";
 
-const require = Cu.import("resource://gre/modules/devtools/Loader.jsm", {}).devtools.require;
+const {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 const console = require("resource://gre/modules/devtools/Console.jsm").console;
 const gStringBundle = Services.strings.createBundle(PROPERTIES_URL);
 
 
 /**
  * Returns a localized string with the given key name from the string bundle.
  *
  * @param aName
--- a/browser/devtools/styleeditor/StyleSheetEditor.jsm
+++ b/browser/devtools/styleeditor/StyleSheetEditor.jsm
@@ -6,17 +6,17 @@
 "use strict";
 
 this.EXPORTED_SYMBOLS = ["StyleSheetEditor", "prettifyCSS"];
 
 const Cc = Components.classes;
 const Ci = Components.interfaces;
 const Cu = Components.utils;
 
-const require = Cu.import("resource://gre/modules/devtools/Loader.jsm", {}).devtools.require;
+const {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 const Editor  = require("devtools/sourceeditor/editor");
 const {Promise: promise} = Cu.import("resource://gre/modules/Promise.jsm", {});
 const {CssLogic} = require("devtools/styleinspector/css-logic");
 const {console} = require("resource://gre/modules/devtools/Console.jsm");
 
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/FileUtils.jsm");
 Cu.import("resource://gre/modules/NetUtil.jsm");
--- a/browser/devtools/styleeditor/test/browser_styleeditor_sourcemap_watching.js
+++ b/browser/devtools/styleeditor/test/browser_styleeditor_sourcemap_watching.js
@@ -1,14 +1,13 @@
 /* vim: set ts=2 et sw=2 tw=80: */
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 Components.utils.import("resource://gre/modules/Task.jsm");
-let {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
 let {Promise: promise} = Cu.import("resource://gre/modules/Promise.jsm", {});
 
 const TESTCASE_URI_HTML = TEST_BASE_HTTP + "sourcemaps-watching.html";
 const TESTCASE_URI_CSS = TEST_BASE_HTTP + "sourcemap-css/sourcemaps.css";
 const TESTCASE_URI_REG_CSS = TEST_BASE_HTTP + "simple.css";
 const TESTCASE_URI_SCSS = TEST_BASE_HTTP + "sourcemap-sass/sourcemaps.scss";
 const TESTCASE_URI_MAP = TEST_BASE_HTTP + "sourcemap-css/sourcemaps.css.map";
 const TESTCASE_SCSS_NAME = "sourcemaps.scss";
--- a/browser/devtools/styleeditor/test/browser_styleeditor_sv_resize.js
+++ b/browser/devtools/styleeditor/test/browser_styleeditor_sv_resize.js
@@ -1,23 +1,25 @@
 /* vim: set ts=2 et sw=2 tw=80: */
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Test that resizing the source editor container doesn't move the caret.
 
 const TESTCASE_URI = TEST_BASE_HTTP + "simple.html";
 
+const {Toolbox} = require("devtools/framework/toolbox");
+
 add_task(function* () {
   let { toolbox, ui } = yield openStyleEditorForURL(TESTCASE_URI);
 
   is(ui.editors.length, 2, "There are 2 style sheets initially");
 
   info("Changing toolbox host to a window.");
-  yield toolbox.switchHost(devtools.Toolbox.HostType.WINDOW);
+  yield toolbox.switchHost(Toolbox.HostType.WINDOW);
 
   let editor = yield ui.editors[0].getSourceEditor();
   let originalSourceEditor = editor.sourceEditor;
 
   let hostWindow = toolbox._host._window;
   let originalWidth = hostWindow.outerWidth;
   let originalHeight = hostWindow.outerHeight;
 
--- a/browser/devtools/styleeditor/test/head.js
+++ b/browser/devtools/styleeditor/test/head.js
@@ -2,21 +2,21 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 const FRAME_SCRIPT_UTILS_URL = "chrome://browser/content/devtools/frame-script-utils.js"
 const TEST_BASE = "chrome://mochitests/content/browser/browser/devtools/styleeditor/test/";
 const TEST_BASE_HTTP = "http://example.com/browser/browser/devtools/styleeditor/test/";
 const TEST_BASE_HTTPS = "https://example.com/browser/browser/devtools/styleeditor/test/";
 const TEST_HOST = 'mochi.test:8888';
 
-let {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
-let TargetFactory = devtools.TargetFactory;
+let {require} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
+let {TargetFactory} = require("devtools/framework/target");
 let {console} = Cu.import("resource://gre/modules/devtools/Console.jsm", {});
 let {Promise: promise} = Cu.import("resource://gre/modules/Promise.jsm", {});
-let DevToolsUtils = devtools.require("devtools/toolkit/DevToolsUtils");
+let DevToolsUtils = require("devtools/toolkit/DevToolsUtils");
 
 // Import the GCLI test helper
 let testDir = gTestPath.substr(0, gTestPath.lastIndexOf("/"));
 Services.scriptloader.loadSubScript(testDir + "../../../commandline/test/helpers.js", this);
 
 DevToolsUtils.testing = true;
 SimpleTest.registerCleanupFunction(() => {
   DevToolsUtils.testing = false;
--- a/browser/devtools/styleinspector/computedview.xhtml
+++ b/browser/devtools/styleinspector/computedview.xhtml
@@ -30,18 +30,18 @@
     <link rel="stylesheet" href="chrome://global/skin/global.css"  type="text/css"/>
     <link rel="stylesheet" href="chrome://browser/skin/devtools/common.css"  type="text/css"/>
     <link rel="stylesheet" href="chrome://browser/skin/devtools/computedview.css"  type="text/css"/>
 
     <script type="application/javascript;version=1.8" src="theme-switching.js"/>
 
     <script type="application/javascript;version=1.8">
       window.setPanel = function(panel, iframe) {
-        let {devtools} = Components.utils.import("resource://gre/modules/devtools/Loader.jsm", {});
-        let inspector = devtools.require("devtools/styleinspector/style-inspector");
+        let {require} = Components.utils.import("resource://gre/modules/devtools/Loader.jsm", {});
+        let inspector = require("devtools/styleinspector/style-inspector");
         this.computedview = new inspector.ComputedViewTool(panel, window, iframe);
       }
       window.onunload = function() {
         if (this.computedview) {
           this.computedview.destroy();
         }
       }
     </script>
--- a/browser/devtools/styleinspector/cssruleview.xhtml
+++ b/browser/devtools/styleinspector/cssruleview.xhtml
@@ -19,18 +19,18 @@
     <link rel="stylesheet" href="chrome://browser/skin/devtools/common.css"  type="text/css"/>
     <link rel="stylesheet" href="chrome://browser/content/devtools/ruleview.css"  type="text/css"/>
     <link rel="stylesheet" href="chrome://browser/skin/devtools/ruleview.css"  type="text/css"/>
 
     <script type="application/javascript;version=1.8" src="theme-switching.js"/>
 
     <script type="application/javascript;version=1.8">
       window.setPanel = function(panel, iframe) {
-        let {devtools} = Components.utils.import("resource://gre/modules/devtools/Loader.jsm", {});
-        let inspector = devtools.require("devtools/styleinspector/style-inspector");
+        let {require} = Components.utils.import("resource://gre/modules/devtools/Loader.jsm", {});
+        let inspector = require("devtools/styleinspector/style-inspector");
         this.ruleview = new inspector.RuleViewTool(panel, window, iframe);
       }
       window.onunload = function() {
         if (this.ruleview) {
           this.ruleview.destroy();
         }
       }
     </script>
--- a/browser/devtools/styleinspector/test/browser_computedview_getNodeInfo.js
+++ b/browser/devtools/styleinspector/test/browser_computedview_getNodeInfo.js
@@ -15,17 +15,17 @@
 // is no need for testing it again here.
 // This test however serves as a unit test for getNodeInfo.
 
 const {
   VIEW_NODE_SELECTOR_TYPE,
   VIEW_NODE_PROPERTY_TYPE,
   VIEW_NODE_VALUE_TYPE,
   VIEW_NODE_IMAGE_URL_TYPE
-} = devtools.require("devtools/styleinspector/style-inspector-overlays");
+} = require("devtools/styleinspector/style-inspector-overlays");
 
 const PAGE_CONTENT = [
   '<style type="text/css">',
   '  body {',
   '    background: red;',
   '    color: white;',
   '  }',
   '  div {',
--- a/browser/devtools/styleinspector/test/browser_computedview_matched-selectors_01.js
+++ b/browser/devtools/styleinspector/test/browser_computedview_matched-selectors_01.js
@@ -1,17 +1,17 @@
 /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
 /* Any copyright is dedicated to the Public Domain.
  http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 // Checking selector counts, matched rules and titles in the computed-view
 
-const {PropertyView} = devtools.require("devtools/styleinspector/computed-view");
+const {PropertyView} = require("devtools/styleinspector/computed-view");
 const TEST_URI = TEST_URL_ROOT + "doc_matched_selectors.html";
 
 add_task(function*() {
   yield addTab(TEST_URI);
   let {toolbox, inspector, view} = yield openComputedView();
 
   yield selectNode("#test", inspector);
   yield testMatchedSelectors(view, inspector);
--- a/browser/devtools/styleinspector/test/browser_computedview_media-queries.js
+++ b/browser/devtools/styleinspector/test/browser_computedview_media-queries.js
@@ -4,18 +4,18 @@
 
 "use strict";
 
 // Tests that we correctly display appropriate media query titles in the
 // property view.
 
 const TEST_URI = TEST_URL_ROOT + "doc_media_queries.html";
 
-let {PropertyView} = devtools.require("devtools/styleinspector/computed-view");
-let {CssLogic} = devtools.require("devtools/styleinspector/css-logic");
+let {PropertyView} = require("devtools/styleinspector/computed-view");
+let {CssLogic} = require("devtools/styleinspector/css-logic");
 
 add_task(function*() {
   yield addTab(TEST_URI);
   let {toolbox, inspector, view} = yield openComputedView();
 
   info("Selecting the test element");
   yield selectNode("div", inspector);
 
--- a/browser/devtools/styleinspector/test/browser_ruleview_context-menu-show-mdn-docs-01.js
+++ b/browser/devtools/styleinspector/test/browser_ruleview_context-menu-show-mdn-docs-01.js
@@ -11,17 +11,17 @@
  * docs tooltip should be shown, containing docs from MDN for that property.
  *
  * This file tests that the context menu item is shown when it should be
  * shown and hidden when it should be hidden.
  */
 
 "use strict";
 
-const {setBaseCssDocsUrl} = devtools.require("devtools/shared/widgets/MdnDocsWidget");
+const {setBaseCssDocsUrl} = require("devtools/shared/widgets/MdnDocsWidget");
 
 /**
  * The test document tries to confuse the context menu
  * code by having a tag called "padding" and a property
  * value called "margin".
  */
 const TEST_DOC =`
 <html>
--- a/browser/devtools/styleinspector/test/browser_ruleview_context-menu-show-mdn-docs-02.js
+++ b/browser/devtools/styleinspector/test/browser_ruleview_context-menu-show-mdn-docs-02.js
@@ -12,17 +12,17 @@
  *
  * This file tests that:
  * - clicking the context menu item shows the tooltip
  * - pressing "Escape" while the tooltip is showing hides the tooltip
  */
 
 "use strict";
 
-const {setBaseCssDocsUrl} = devtools.require("devtools/shared/widgets/MdnDocsWidget");
+const {setBaseCssDocsUrl} = require("devtools/shared/widgets/MdnDocsWidget");
 
 const PROPERTYNAME = "color";
 
 const TEST_DOC = `
 <html>
   <body>
     <div style="color: red">
       Test "Show MDN Docs" context menu option
--- a/browser/devtools/styleinspector/test/browser_ruleview_context-menu-show-mdn-docs-03.js
+++ b/browser/devtools/styleinspector/test/browser_ruleview_context-menu-show-mdn-docs-03.js
@@ -9,17 +9,17 @@
  * The desired behavior is:
  * - if the preference is true, show the "Show MDN Docs" context menu item
  * - if the preference is false, don't show the item
  * - listen for changes to the pref, so we can show/hide the item dynamically
  */
 
 "use strict";
 
-const { PrefObserver } = devtools.require("devtools/styleeditor/utils");
+const { PrefObserver } = require("devtools/styleeditor/utils");
 const PREF_ENABLE_MDN_DOCS_TOOLTIP = "devtools.inspector.mdnDocsTooltip.enabled";
 const PROPERTY_NAME_CLASS = "ruleview-propertyname";
 
 const TEST_DOC = `
 <html>
   <body>
     <div style="color: red">
       Test the pref to enable/disable the "Show MDN Docs" context menu option
--- a/browser/devtools/styleinspector/test/browser_ruleview_inherit.js
+++ b/browser/devtools/styleinspector/test/browser_ruleview_inherit.js
@@ -1,17 +1,17 @@
 /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
 /* Any copyright is dedicated to the Public Domain.
  http://creativecommons.org/publicdomain/zero/1.0/ */