• joepeck@webkit.org's avatar
    Web Inspector: Move InjectedScript classes into JavaScriptCore · 69a4eafa
    joepeck@webkit.org authored
    https://bugs.webkit.org/show_bug.cgi?id=126598
    
    Source/JavaScriptCore:
    
    Reviewed by Timothy Hatcher.
    
    Part 1: Extract InspectorInstrumentationCookie class from InspectorInstrumentation.
    Part 2: Move InjectedScriptSource and generation into JavaScriptCore.
    Part 3: Update CodeGeneratorInspector to avoid inlining virtual destructors.
    Part 4: Move all inspector scripts into JavaScriptCore and update generators.
    Part 5: Move InjectedScript classes into JavaScriptCore
    Part 6: Put it all together. Make WebCore use the JavaScriptCore InjectedScript files.
    
    There are pieces of logic that WebCore wants to hook into in the InjectedScript
    execution (e.g. for CommandLineAPIModule and InspectorInstrumentation). Create
    hooks for those in a base class called InspectorEnvironment. For now, the
    InspectorControllers (Page, JSGlobalObject, Worker) will be the InspectorEnvironments
    and provide answers to its hooks.
    
    * inspector/InspectorEnvironment.h: Added.
    New hooks needed by WebCore in various places. Mostly stubbed in JavaScriptCore.
    
    * inspector/InjectedScript.cpp: Renamed from Source/WebCore/inspector/InjectedScript.cpp.
    * inspector/InjectedScript.h: Added.
    * inspector/InjectedScriptBase.cpp: Renamed from Source/WebCore/inspector/InjectedScriptBase.cpp.
    * inspector/InjectedScriptBase.h: Renamed from Source/WebCore/inspector/InjectedScriptBase.h.
    * inspector/InjectedScriptModule.cpp: Renamed from Source/WebCore/inspector/InjectedScriptModule.cpp.
    * inspector/InjectedScriptModule.h: Renamed from Source/WebCore/inspector/InjectedScriptModule.h.
    Cleanup the style of these files (nullptr, formatting, whitespace, etc).
    Use the InspectorEnvironments call/evaluate function for ScriptFunctionCalls and checking access
    
    * inspector/InjectedScriptManager.cpp: Renamed from Source/WebCore/inspector/InjectedScriptManager.cpp.
    * inspector/InjectedScriptManager.h: Renamed from Source/WebCore/inspector/InjectedScriptManager.h.
    Take an InspectorEnvironment with multiple hooks, instead of a single hook function.
    
    * inspector/InjectedScriptHost.cpp: Added.
    * inspector/InjectedScriptHost.h: Added.
    * inspector/JSInjectedScriptHost.cpp: Renamed from Source/WebCore/bindings/js/JSInjectedScriptHostCustom.cpp.
    * inspector/JSInjectedScriptHost.h: Added.
    * inspector/JSInjectedScriptHostPrototype.cpp: Added.
    * inspector/JSInjectedScriptHostPrototype.h: Added.
    Implementation of InjectedScriptHost which is passed into the script (InjectedScriptSource.js)
    that we inject into the page. This is mostly copied from the original autogenerated code,
    then simplified and cleaned up. InjectedScriptHost can be subclasses to provide specialized
    implementations of isHTMLAllCollection and type for Web/DOM types unknown to a pure JS context.
    
    For OS X be sure to export the scripts as if they are private headers.
    
    * GNUmakefile.am:
    * JavaScriptCore.xcodeproj/project.pbxproj:
    * inspector/scripts/cssmin.py: Renamed from Source/WebCore/inspector/Scripts/cssmin.py.
    * inspector/scripts/inline-and-minify-stylesheets-and-scripts.py: Renamed from Source/WebCore/inspector/Scripts/inline-and-minify-stylesheets-and-scripts.py.
    * inspector/scripts/jsmin.py: Renamed from Source/WebCore/inspector/Scripts/jsmin.py.
    * inspector/scripts/xxd.pl: Renamed from Source/WebCore/inspector/xxd.pl.
    
    This avoids build errors about duplicate exported virtual inlined methods
    are included from multiple places. Just put empty destructors in the
    implementation file instead of inlined.
    
    * inspector/scripts/CodeGeneratorInspector.py:
    (Generator):
    (Generator.go):
    * inspector/scripts/CodeGeneratorInspectorStrings.py:
    
    Move InjectedScriptSource.js and derived sources generation.
    
    * CMakeLists.txt:
    * DerivedSources.make:
    * GNUmakefile.am:
    * GNUmakefile.list.am:
    * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
    * JavaScriptCore.xcodeproj/project.pbxproj:
    * inspector/InjectedScriptSource.js: Renamed from Source/WebCore/inspector/InjectedScriptSource.js.
    
    Source/WebCore:
    
    Reviewed by Timothy Hatcher.
    
    * CMakeLists.txt:
    * DerivedSources.cpp:
    * DerivedSources.make:
    * GNUmakefile.list.am:
    * UseJSC.cmake:
    * WebCore.vcxproj/WebCore.vcxproj:
    * WebCore.vcxproj/WebCore.vcxproj.filters:
    * WebCore.xcodeproj/project.pbxproj:
    Remove old InjectedScript files.
    
    * ForwardingHeaders/inspector/InjectedScript.h: Added.
    * ForwardingHeaders/inspector/InjectedScriptBase.h: Added.
    * ForwardingHeaders/inspector/InjectedScriptHost.h: Added.
    * ForwardingHeaders/inspector/InjectedScriptManager.h: Added.
    * ForwardingHeaders/inspector/InjectedScriptModule.h: Added.
    * ForwardingHeaders/inspector/InspectorEnvironment.h: Added.
    Expose headers to WebCore.
    
    * inspector/InspectorController.h:
    * inspector/InspectorController.cpp:
    (WebCore::InspectorController::InspectorController):
    (WebCore::InspectorController::developerExtrasEnabled):
    (WebCore::InspectorController::canAccessInspectedScriptState):
    (WebCore::InspectorController::functionCallHandler):
    (WebCore::InspectorController::evaluateHandler):
    (WebCore::InspectorController::willCallInjectedScriptFunction):
    (WebCore::InspectorController::didCallInjectedScriptFunction):
    * inspector/WorkerInspectorController.h:
    * inspector/WorkerInspectorController.cpp:
    (WebCore::WorkerInspectorController::WorkerInspectorController):
    (WebCore::WorkerInspectorController::functionCallHandler):
    (WebCore::WorkerInspectorController::evaluateHandler):
    (WebCore::WorkerInspectorController::willCallInjectedScriptFunction):
    (WebCore::WorkerInspectorController::didCallInjectedScriptFunction):
    Make both InspectorControllers in WebCore be InspectorEnvironments.
    
    * bindings/js/JSMainThreadExecState.h:
    * bindings/js/JSMainThreadExecState.cpp:
    (WebCore::evaluateHandlerFromAnyThread):
    Make JSC::evaluate wrapper like the existing JSC::call wrapper.
    These will be the ScriptFunctionCall implementations when debugging
    a WebCore::Page or worker, instead of the pure JSC versions.
    
    * inspector/PageInjectedScriptHost.h: Copied from Source/WebCore/inspector/CommandLineAPIModule.h.
    * inspector/PageInjectedScriptHost.cpp: Copied from Source/WebCore/inspector/PageInjectedScriptManager.cpp.
    (WebCore::PageInjectedScriptHost::type):
    (WebCore::PageInjectedScriptHost::isHTMLAllCollection):
    WebCore InjectedScriptHost implementation for DOM type handling.
    
    * inspector/PageInjectedScriptManager.h:
    * inspector/PageInjectedScriptManager.cpp:
    (WebCore::PageInjectedScriptManager::PageInjectedScriptManager):
    (WebCore::PageInjectedScriptManager::discardInjectedScriptsFor):
    WebCore InjectedScriptManager implementation for CommandLineAPI and
    specialized DOMWindow injected script management.
    
    * bindings/js/JSBindingsAllInOne.cpp:
    * inspector/CommandLineAPIHost.cpp:
    * inspector/CommandLineAPIHost.h:
    * inspector/CommandLineAPIModule.cpp:
    (WebCore::CommandLineAPIModule::host):
    * inspector/CommandLineAPIModule.h:
    * inspector/ConsoleMessage.cpp:
    (WebCore::ConsoleMessage::addToFrontend):
    * inspector/ConsoleMessage.h:
    * inspector/InjectedScriptCanvasModule.cpp:
    (WebCore::InjectedScriptCanvasModule::InjectedScriptCanvasModule):
    * inspector/InjectedScriptCanvasModule.h:
    * inspector/InspectorAllInOne.cpp:
    * inspector/InspectorCanvasAgent.cpp:
    * inspector/InspectorCanvasAgent.h:
    (WebCore::InspectorCanvasAgent::create):
    * inspector/InspectorConsoleAgent.cpp:
    (WebCore::InspectorConsoleAgent::InspectorConsoleAgent):
    * inspector/InspectorConsoleAgent.h:
    * inspector/InspectorDOMAgent.cpp:
    * inspector/InspectorDOMAgent.h:
    (WebCore::InspectorDOMAgent::create):
    * inspector/InspectorDebuggerAgent.cpp:
    * inspector/InspectorDebuggerAgent.h:
    (WebCore::InspectorDebuggerAgent::injectedScriptManager):
    * inspector/InspectorHeapProfilerAgent.cpp:
    (WebCore::InspectorHeapProfilerAgent::create):
    (WebCore::InspectorHeapProfilerAgent::InspectorHeapProfilerAgent):
    * inspector/InspectorHeapProfilerAgent.h:
    * inspector/InspectorIndexedDBAgent.cpp:
    * inspector/InspectorIndexedDBAgent.h:
    (WebCore::InspectorIndexedDBAgent::create):
    * inspector/InspectorPageAgent.cpp:
    * inspector/InspectorPageAgent.h:
    * inspector/InspectorProfilerAgent.cpp:
    (WebCore::PageProfilerAgent::PageProfilerAgent):
    (WebCore::InspectorProfilerAgent::create):
    (WebCore::WorkerProfilerAgent::WorkerProfilerAgent):
    (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
    * inspector/InspectorProfilerAgent.h:
    * inspector/InspectorRuntimeAgent.cpp:
    * inspector/InspectorRuntimeAgent.h:
    (WebCore::InspectorRuntimeAgent::injectedScriptManager):
    * inspector/PageConsoleAgent.cpp:
    (WebCore::PageConsoleAgent::PageConsoleAgent):
    * inspector/PageConsoleAgent.h:
    (WebCore::PageConsoleAgent::create):
    * inspector/PageDebuggerAgent.cpp:
    * inspector/PageDebuggerAgent.h:
    * inspector/PageRuntimeAgent.cpp:
    * inspector/PageRuntimeAgent.h:
    (WebCore::PageRuntimeAgent::create):
    * inspector/WorkerConsoleAgent.cpp:
    (WebCore::WorkerConsoleAgent::WorkerConsoleAgent):
    * inspector/WorkerConsoleAgent.h:
    (WebCore::WorkerConsoleAgent::create):
    * inspector/WorkerDebuggerAgent.cpp:
    * inspector/WorkerDebuggerAgent.h:
    * inspector/WorkerRuntimeAgent.cpp:
    * inspector/WorkerRuntimeAgent.h:
    (WebCore::WorkerRuntimeAgent::create):
    Switch to using the Inspector namespace and JSC InjectedScript files.
    
    * bindings/js/JSInjectedScriptManager.cpp: Removed.
    * inspector/InjectedScript.h: Removed.
    * inspector/InjectedScriptHost.cpp: Removed.
    * inspector/InjectedScriptHost.h: Removed.
    * inspector/InjectedScriptHost.idl: Removed.
    
    With the updated location switch to using the appropriate INSPECTOR_SCRIPTS_DIR
    variable which defines where the scripts are.
    
    * CMakeLists.txt:
    * DerivedSources.make:
    * GNUmakefile.am:
    * GNUmakefile.list.am:
    * WebCore.vcxproj/WebCore.vcxproj:
    * WebCore.vcxproj/WebCore.vcxproj.filters:
    * WebCore.xcodeproj/project.pbxproj:
    
    Currently InjectedScriptBase uses InspectorInstrumentation directly
    to track calling into JavaScript for timeline purposes. We will remove
    the direct call from InjectedScriptBase and extracting the Cookie class
    will make that easier.
    
    * CMakeLists.txt:
    * GNUmakefile.list.am:
    * WebCore.vcxproj/WebCore.vcxproj:
    * WebCore.vcxproj/WebCore.vcxproj.filters:
    * WebCore.xcodeproj/project.pbxproj:
    * inspector/InspectorAllInOne.cpp:
    * inspector/InspectorInstrumentation.cpp:
    * inspector/InspectorInstrumentation.h:
    * inspector/InspectorInstrumentationCookie.cpp: Added.
    (WebCore::InspectorInstrumentationCookie::InspectorInstrumentationCookie):
    (WebCore::InspectorInstrumentationCookie::operator=):
    (WebCore::InspectorInstrumentationCookie::~InspectorInstrumentationCookie):
    * inspector/InspectorInstrumentationCookie.h: Added.
    (WebCore::InspectorInstrumentationCookie::isValid):
    (WebCore::InspectorInstrumentationCookie::instrumentingAgents):
    (WebCore::InspectorInstrumentationCookie::hasMatchingTimelineAgentId):
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@161563 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    69a4eafa