[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc

loislo at chromium.org loislo at chromium.org
Wed Dec 22 11:26:00 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit d923b0a72242f6f9ae060d20a3e391f6ed5da461
Author: loislo at chromium.org <loislo at chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Fri Jul 23 06:39:07 2010 +0000

    2010-07-22  Ilya Tikhonovsky  <loislo at chromium.org>
    
            Reviewed by Yury Semikhatsky.
    
            WebInspector: CodeGeneratorInspector was extended and now it can
            generate InspectorBackedDispatcher's code. This dispatcher will
            validate and dispatch incoming inspector commands only by native
            code without using javaScript. That is necessary step for
            RemoteDebugging support.
            https://bugs.webkit.org/show_bug.cgi?id=42588
    
            * GNUmakefile.am:
            * WebCore.gyp/WebCore.gyp:
            * WebCore.gypi:
            * WebCore.pri:
            * WebCore.vcproj/WebCore.vcproj:
            * WebCore.xcodeproj/project.pbxproj:
            * inspector/CodeGeneratorInspector.pm:
            * inspector/InspectorController.cpp:
            (WebCore::InspectorController::InspectorController):
            * inspector/InspectorController.h:
            (WebCore::InspectorController::inspectorBackendDispatcher):
            * inspector/front-end/ElementsPanel.js:
            (WebInspector.ElementsPanel.prototype.setDocument):
    
    2010-07-22  Ilya Tikhonovsky  <loislo at chromium.org>
    
            Reviewed by Yury Semikhatsky.
    
            WebInspector: CodeGeneratorInspector was extended and now it can
            generate InspectorBackedDispatcher's code. This dispatcher will
            validate and dispatch incoming inspector commands only by native
            code without using javaScript. That is necessary step for
            RemoteDebugging support.
            https://bugs.webkit.org/show_bug.cgi?id=42588
    
            * src/ToolsAgent.h:
            * src/WebDevToolsAgentImpl.cpp:
            (WebKit::WebDevToolsAgentImpl::dispatchOnInspectorController):
            * src/WebDevToolsAgentImpl.h:
            * src/js/InspectorControllerImpl.js:
            (devtools.InspectorBackendImpl.prototype.callInspectorController_):
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@63952 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 4e8aead..5b5cfa9 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,28 @@
+2010-07-22  Ilya Tikhonovsky  <loislo at chromium.org>
+
+        Reviewed by Yury Semikhatsky.
+
+        WebInspector: CodeGeneratorInspector was extended and now it can
+        generate InspectorBackedDispatcher's code. This dispatcher will
+        validate and dispatch incoming inspector commands only by native
+        code without using javaScript. That is necessary step for
+        RemoteDebugging support.
+        https://bugs.webkit.org/show_bug.cgi?id=42588
+
+        * GNUmakefile.am:
+        * WebCore.gyp/WebCore.gyp:
+        * WebCore.gypi:
+        * WebCore.pri:
+        * WebCore.vcproj/WebCore.vcproj:
+        * WebCore.xcodeproj/project.pbxproj:
+        * inspector/CodeGeneratorInspector.pm:
+        * inspector/InspectorController.cpp:
+        (WebCore::InspectorController::InspectorController):
+        * inspector/InspectorController.h:
+        (WebCore::InspectorController::inspectorBackendDispatcher):
+        * inspector/front-end/ElementsPanel.js:
+        (WebInspector.ElementsPanel.prototype.setDocument):
+
 2010-07-22  Shinichiro Hamaji  <hamaji at chromium.org>
 
         Reviewed by Kent Tamura.
diff --git a/WebCore/GNUmakefile.am b/WebCore/GNUmakefile.am
index 8fbbb95..ae23fce 100644
--- a/WebCore/GNUmakefile.am
+++ b/WebCore/GNUmakefile.am
@@ -99,6 +99,8 @@ webcore_built_sources += \
 	DerivedSources/WebCore/HTMLEntityNames.cpp \
 	DerivedSources/WebCore/HTMLNames.cpp \
 	DerivedSources/WebCore/HTMLNames.h \
+	DerivedSources/WebCore/InspectorBackendDispatcher.cpp \
+	DerivedSources/WebCore/InspectorBackendDispatcher.h \
 	DerivedSources/WebCore/JSAbstractWorker.cpp \
 	DerivedSources/WebCore/JSAbstractWorker.h \
 	DerivedSources/WebCore/JSArrayBuffer.cpp \
@@ -4396,8 +4398,8 @@ DerivedSources/WebCore/XMLNSNames.cpp DerivedSources/WebCore/XMLNSNames.h: $(Web
 DerivedSources/WebCore/XMLNames.cpp DerivedSources/WebCore/XMLNames.h: $(WebCore)/dom/make_names.pl $(WebCore)/xml/xmlattrs.in
 	$(AM_V_GEN)$(PERL) -I$(WebCore)/bindings/scripts $< --attrs $(WebCore)/xml/xmlattrs.in --outputDir "$(GENSOURCES_WEBCORE)"
 
-# Remote Inspector frontend
-DerivedSources/WebCore/RemoteInspectorFrontend.cpp DerivedSources/WebCore/RemoteInspectorFrontend.h: $(WebCore)/inspector/Inspector.idl $(SCRIPTS_BINDINGS) $(WebCore)/inspector/CodeGeneratorInspector.pm
+# RemoteInspectorFrontend and InspectorBackendDispatcher
+DerivedSources/WebCore/RemoteInspectorFrontend.cpp DerivedSources/WebCore/RemoteInspectorFrontend.h DerivedSources/WebCore/InspectorBackendDispatcher.cpp DerivedSources/WebCore/InspectorBackendDispatcher.h: $(WebCore)/inspector/Inspector.idl $(SCRIPTS_BINDINGS) $(WebCore)/inspector/CodeGeneratorInspector.pm
 	$(AM_V_GEN)$(PERL) -I$(WebCore)/bindings/scripts -I$(WebCore)/inspector $(WebCore)/bindings/scripts/generate-bindings.pl $(IDL_PATH:%=--include "%") --outputDir "$(GENSOURCES_WEBCORE)" --defines "LANGUAGE_JAVASCRIPT=1 $(FEATURE_DEFINES)" --generator Inspector $<
 
 IDL_PATH := \
diff --git a/WebCore/WebCore.gyp/WebCore.gyp b/WebCore/WebCore.gyp/WebCore.gyp
index 6193294..abd49e7 100644
--- a/WebCore/WebCore.gyp/WebCore.gyp
+++ b/WebCore/WebCore.gyp/WebCore.gyp
@@ -476,15 +476,20 @@
         },
         {
           'action_name': 'RemoteInspectorFrontend',
+          # The second input item will be used as item name in vcproj.
+          # It is not possible to put Inspector.idl there because
+          # all idl files are marking as excluded by gyp generator.
           'inputs': [
             '../bindings/scripts/generate-bindings.pl',
+            '../inspector/CodeGeneratorInspector.pm',
             '../bindings/scripts/CodeGenerator.pm',
             '../bindings/scripts/IDLParser.pm',
             '../bindings/scripts/IDLStructure.pm',
-            '../inspector/CodeGeneratorInspector.pm',
             '../inspector/Inspector.idl',
           ],
           'outputs': [
+            '<(SHARED_INTERMEDIATE_DIR)/webcore/bindings/InspectorBackendDispatcher.cpp',
+            '<(SHARED_INTERMEDIATE_DIR)/webkit/bindings/InspectorBackendDispatcher.h',
             '<(SHARED_INTERMEDIATE_DIR)/webcore/bindings/RemoteInspectorFrontend.cpp',
             '<(SHARED_INTERMEDIATE_DIR)/webkit/bindings/RemoteInspectorFrontend.h',
           ],
@@ -505,7 +510,7 @@
             '--generator', 'Inspector',
             '<@(generator_include_dirs)'
           ],
-          'message': 'Generating RemoteInspectorFrontend class from Inspector.idl',
+          'message': 'Generating Inspector interface classes from Inspector.idl',
         },
         {
           'action_name': 'XMLNames',
@@ -714,6 +719,7 @@
 
         # Additional .cpp files from the webcore_inspector_sources list.
         '<(SHARED_INTERMEDIATE_DIR)/webcore/bindings/RemoteInspectorFrontend.cpp',
+        '<(SHARED_INTERMEDIATE_DIR)/webcore/bindings/InspectorBackendDispatcher.cpp',
       ],
       'conditions': [
         ['javascript_engine=="v8"', {
diff --git a/WebCore/WebCore.gypi b/WebCore/WebCore.gypi
index f222ead..f53f456 100644
--- a/WebCore/WebCore.gypi
+++ b/WebCore/WebCore.gypi
@@ -278,9 +278,6 @@
             'xml/XPathResult.idl',
             'xml/XSLTProcessor.idl',
         ],
-        'webcore_inspector_idl_files': [
-            'inspector/Inspector.idl',
-        ],
         'webcore_svg_bindings_idl_files': [
             'svg/ElementTimeControl.idl',
             'svg/SVGAElement.idl',
diff --git a/WebCore/WebCore.pri b/WebCore/WebCore.pri
index 8141499..18a76a0 100644
--- a/WebCore/WebCore.pri
+++ b/WebCore/WebCore.pri
@@ -816,7 +816,7 @@ idl.depends = $$PWD/bindings/scripts/CodeGenerator.pm \
 addExtraCompiler(idl)
 
 # GENERATOR 2: inspector idl compiler
-inspectorIDL.output = $${WC_GENERATED_SOURCES_DIR}/Remote${QMAKE_FILE_BASE}Frontend.cpp
+inspectorIDL.output = $${WC_GENERATED_SOURCES_DIR}/Remote${QMAKE_FILE_BASE}Frontend.cpp $${WC_GENERATED_SOURCES_DIR}/${QMAKE_FILE_BASE}BackendDispatcher.cpp
 inspectorIDL.input = INSPECTOR_INTERFACES
 inspectorIDL.wkScript = $$PWD/bindings/scripts/generate-bindings.pl
 inspectorIDL.commands = perl -I$$PWD/bindings/scripts -I$$PWD/inspector $$inspectorIDL.wkScript --defines \"$${FEATURE_DEFINES_JAVASCRIPT}\" --generator Inspector --outputDir $$WC_GENERATED_SOURCES_DIR --preprocessor \"$${QMAKE_MOC} -E\" ${QMAKE_FILE_NAME}
diff --git a/WebCore/WebCore.vcproj/WebCore.vcproj b/WebCore/WebCore.vcproj/WebCore.vcproj
index 78440fa..4479182 100644
--- a/WebCore/WebCore.vcproj/WebCore.vcproj
+++ b/WebCore/WebCore.vcproj/WebCore.vcproj
@@ -20741,6 +20741,14 @@
 				>
 			</File>
 			<File
+				RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\InspectorBackendDispatcher.h"
+				>
+			</File>
+			<File
+				RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\InspectorBackendDispatcher.h"
+				>
+			</File>
+			<File
 				RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\RemoteInspectorFrontend.cpp"
 				>
 			</File>
diff --git a/WebCore/WebCore.xcodeproj/project.pbxproj b/WebCore/WebCore.xcodeproj/project.pbxproj
index 0d4fc35..79cd66b 100644
--- a/WebCore/WebCore.xcodeproj/project.pbxproj
+++ b/WebCore/WebCore.xcodeproj/project.pbxproj
@@ -1030,6 +1030,8 @@
 		4F3289B511A42AAB005ABE7E /* InspectorValues.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4F3289B311A42AAB005ABE7E /* InspectorValues.cpp */; };
 		4F3289B611A42AAB005ABE7E /* InspectorValues.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F3289B411A42AAB005ABE7E /* InspectorValues.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		4F4F5FFB11CBD2E100A186BF /* RemoteInspectorFrontend.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4F4F5FFA11CBD2D200A186BF /* RemoteInspectorFrontend.cpp */; };
+		4F707A9911EF679400ACDA69 /* InspectorBackendDispatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4F707A9711EF679400ACDA69 /* InspectorBackendDispatcher.cpp */; };
+		4F707A9A11EF679400ACDA69 /* InspectorBackendDispatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F707A9811EF679400ACDA69 /* InspectorBackendDispatcher.h */; };
 		4FD8D0F2119C718B002FA825 /* ScriptGCEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4FD8D0F0119C718B002FA825 /* ScriptGCEvent.cpp */; };
 		4FD8D0F3119C718B002FA825 /* ScriptGCEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FD8D0F1119C718B002FA825 /* ScriptGCEvent.h */; };
 		510184690B08602A004A825F /* CachedPage.h in Headers */ = {isa = PBXBuildFile; fileRef = 510184670B08602A004A825F /* CachedPage.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -6777,6 +6779,8 @@
 		4F3289B411A42AAB005ABE7E /* InspectorValues.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorValues.h; sourceTree = "<group>"; };
 		4F4F5FFA11CBD2D200A186BF /* RemoteInspectorFrontend.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RemoteInspectorFrontend.cpp; sourceTree = "<group>"; };
 		4F4F5FFC11CBD30100A186BF /* RemoteInspectorFrontend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RemoteInspectorFrontend.h; sourceTree = "<group>"; };
+		4F707A9711EF679400ACDA69 /* InspectorBackendDispatcher.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorBackendDispatcher.cpp; sourceTree = "<group>"; };
+		4F707A9811EF679400ACDA69 /* InspectorBackendDispatcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorBackendDispatcher.h; sourceTree = "<group>"; };
 		4FD8D0F0119C718B002FA825 /* ScriptGCEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScriptGCEvent.cpp; sourceTree = "<group>"; };
 		4FD8D0F1119C718B002FA825 /* ScriptGCEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptGCEvent.h; sourceTree = "<group>"; };
 		510184670B08602A004A825F /* CachedPage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CachedPage.h; sourceTree = "<group>"; };
@@ -11438,6 +11442,8 @@
 				9FA37EF71172FD9300C4CD55 /* JSScriptProfile.h */,
 				9FA37EF81172FD9300C4CD55 /* JSScriptProfileNode.cpp */,
 				9FA37EF91172FD9300C4CD55 /* JSScriptProfileNode.h */,
+				4F707A9711EF679400ACDA69 /* InspectorBackendDispatcher.cpp */,
+				4F707A9811EF679400ACDA69 /* InspectorBackendDispatcher.h */,
 				4F4F5FFA11CBD2D200A186BF /* RemoteInspectorFrontend.cpp */,
 				4F4F5FFC11CBD30100A186BF /* RemoteInspectorFrontend.h */,
 			);
@@ -19850,6 +19856,7 @@
 				BC5CFCA911F793320099ED09 /* LocalizationStrategy.h in Headers */,
 				5162C7F511F77EFB00612EFE /* SchemeRegistry.h in Headers */,
 				BCDF317C11F8D683003C5BF8 /* UserTypingGestureIndicator.h in Headers */,
+				4F707A9A11EF679400ACDA69 /* InspectorBackendDispatcher.h in Headers */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -22245,6 +22252,7 @@
 				8C6EA61911EF7E0400FD8EE3 /* RuntimeEnabledFeatures.cpp in Sources */,
 				5162C7F411F77EFB00612EFE /* SchemeRegistry.cpp in Sources */,
 				BCDF317B11F8D683003C5BF8 /* UserTypingGestureIndicator.cpp in Sources */,
+				4F707A9911EF679400ACDA69 /* InspectorBackendDispatcher.cpp in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
diff --git a/WebCore/inspector/CodeGeneratorInspector.pm b/WebCore/inspector/CodeGeneratorInspector.pm
index afaddec..5ade4a6 100644
--- a/WebCore/inspector/CodeGeneratorInspector.pm
+++ b/WebCore/inspector/CodeGeneratorInspector.pm
@@ -14,6 +14,10 @@ $typeTransform{"InspectorClient"} = {
     "forward" => "InspectorClient",
     "header" => "InspectorClient.h",
 };
+$typeTransform{"InspectorBackend"} = {
+    "forward" => "InspectorBackend",
+    "header" => "InspectorBackend.h",
+};
 $typeTransform{"PassRefPtr"} = {
     "forwardHeader" => "wtf/PassRefPtr.h",
 };
@@ -95,6 +99,13 @@ my $verbose;
 
 my $namespace;
 
+my $backendClassName;
+my %backendTypes;
+my %backendMethods;
+my @backendMethodsImpl;
+my $backendConstructor;
+my $backendFooter;
+
 my $frontendClassName;
 my %frontendTypes;
 my %frontendMethods;
@@ -150,6 +161,17 @@ sub GenerateInterface
     $frontendTypes{"InspectorClient"} = 1;
     $frontendTypes{"PassRefPtr"} = 1;
 
+    $backendClassName = $className . "BackendDispatcher";
+    my @backendHead;
+    push(@backendHead, "    ${backendClassName}(InspectorBackend* inspectorBackend) : m_inspectorBackend(inspectorBackend) { }");
+    push(@backendHead, "    void dispatch(const String& message, String* exception);");
+    push(@backendHead, "private:");
+    $backendConstructor = join("\n", @backendHead);
+    $backendFooter = "    InspectorBackend* m_inspectorBackend;";
+    $backendTypes{"InspectorBackend"} = 1;
+    $backendTypes{"PassRefPtr"} = 1;
+    $backendTypes{"Array"} = 1;
+
     generateFunctions($interface);
 }
 
@@ -159,7 +181,9 @@ sub generateFunctions
 
     foreach my $function (@{$interface->functions}) {
         generateFrontendFunction($function);
+        generateBackendFunction($function);
     }
+    push(@backendMethodsImpl, generateBackendDispatcher());
 }
 
 sub generateFrontendFunction
@@ -198,6 +222,94 @@ sub generateFrontendFunction
     }
 }
 
+sub generateBackendFunction
+{
+    my $function = shift;
+    return if $function->signature->extendedAttributes->{"notify"};
+
+    my $functionName = $function->signature->name;
+
+    my @argsFiltered = grep($_->direction eq "in", @{$function->parameters});
+    map($backendTypes{$_->type} = 1, @argsFiltered); # register required types
+    my $arguments = join(", ", map($typeTransform{$_->type}->{"param"} . " " . $_->name, @argsFiltered));
+
+    my $signature = "    void ${functionName}(PassRefPtr<InspectorArray> args);";
+    !$backendMethods{${signature}} || die "Duplicate function was detected for signature '$signature'.";
+    $backendMethods{${signature}} = $functionName;
+
+    my @function;
+    # Skip parameter name if no arguments in the array. Just to avoid unused parameter warning.
+    push(@function, "void ${backendClassName}::${functionName}(PassRefPtr<InspectorArray>" . ( scalar(@argsFiltered) ? " args)" : ")"));
+    push(@function, "{");
+    my $i = 1; # zero element is the method name.
+    foreach my $parameter (@argsFiltered) {
+        push(@function, "    " . $typeTransform{$parameter->type}->{"retVal"} . " " . $parameter->name . ";");
+        push(@function, "    if (!args->get(" . $i . ")->as" . $typeTransform{$parameter->type}->{"accessorSuffix"} . "(&" . $parameter->name . ")) {");
+        push(@function, "        ASSERT_NOT_REACHED();");
+        push(@function, "        return;");
+        push(@function, "    }");
+        ++$i;
+    }
+    push(@function, "    m_inspectorBackend->$functionName(" . join(", ", map($_->name, @argsFiltered)) . ");");
+    push(@function, "}");
+    push(@function, "");
+    push(@backendMethodsImpl, @function);
+}
+
+sub generateBackendDispatcher
+{
+    my @body;
+    my @methods = map($backendMethods{$_}, keys %backendMethods);
+    my @mapEntries = map("dispatchMap.add(\"$_\", &${backendClassName}::$_);", @methods);
+
+    push(@body, "void ${backendClassName}::dispatch(const String& message, String* exception)");
+    push(@body, "{");
+    push(@body, "    typedef void (${backendClassName}::*CallHandler)(PassRefPtr<InspectorArray> args);");
+    push(@body, "    typedef HashMap<String, CallHandler> DispatchMap;");
+    push(@body, "    DEFINE_STATIC_LOCAL(DispatchMap, dispatchMap, );");
+    push(@body, "    if (dispatchMap.isEmpty()) {");
+    push(@body, map("        $_", @mapEntries));
+    push(@body, "    }");
+    push(@body, "");
+    push(@body, "    RefPtr<InspectorValue> parsedMessage = InspectorValue::parseJSON(message);");
+    push(@body, "    if (!parsedMessage) {");
+    push(@body, "        ASSERT_NOT_REACHED();");
+    push(@body, "        *exception = \"Error: Invalid message format. Message should be in JSON format.\";");
+    push(@body, "        return;");
+    push(@body, "    }");
+    push(@body, "");
+    push(@body, "    RefPtr<InspectorArray> messageArray = parsedMessage->asArray();");
+    push(@body, "    if (!messageArray) {");
+    push(@body, "        ASSERT_NOT_REACHED();");
+    push(@body, "        *exception = \"Error: Invalid message format. The message should be a JSONified array of arguments.\";");
+    push(@body, "        return;");
+    push(@body, "    }");
+    push(@body, "");
+    push(@body, "    if (!messageArray->length()) {");
+    push(@body, "        ASSERT_NOT_REACHED();");
+    push(@body, "        *exception = \"Error: Invalid message format. Empty message was received.\";");
+    push(@body, "        return;");
+    push(@body, "    }");
+    push(@body, "");
+    push(@body, "    String methodName;");
+    push(@body, "    if (!messageArray->get(0)->asString(&methodName)) {");
+    push(@body, "        ASSERT_NOT_REACHED();");
+    push(@body, "        *exception = \"Error: Invalid message format. The first element of the message should be method name.\";");
+    push(@body, "        return;");
+    push(@body, "    }");
+    push(@body, "");
+    push(@body, "    HashMap<String, CallHandler>::iterator it = dispatchMap.find(methodName);");
+    push(@body, "    if (it == dispatchMap.end()) {");
+    push(@body, "        ASSERT_NOT_REACHED();");
+    push(@body, "        String::format(\"Error: Invalid method name. '%s' wasn't found.\", methodName.utf8().data());");
+    push(@body, "        return;");
+    push(@body, "    }");
+    push(@body, "");
+    push(@body, "    ((*this).*it->second)(messageArray);");
+    push(@body, "}");
+    return @body;
+}
+
 sub generateHeader
 {
     my $className = shift;
@@ -284,6 +396,15 @@ sub finish
     close($HEADER);
     undef($HEADER);
 
+    open($SOURCE, ">$outputDir/$backendClassName.cpp") || die "Couldn't open file $outputDir/$backendClassName.cpp";
+    print $SOURCE join("\n", generateSource($backendClassName, \%backendTypes, \@backendMethodsImpl));
+    close($SOURCE);
+    undef($SOURCE);
+
+    open($HEADER, ">$outputHeadersDir/$backendClassName.h") || die "Couldn't open file $outputHeadersDir/$backendClassName.h";
+    print $HEADER join("\n", generateHeader($backendClassName, \%backendTypes, $backendConstructor, \%backendMethods, $backendFooter));
+    close($HEADER);
+    undef($HEADER);
 }
 
 1;
diff --git a/WebCore/inspector/InspectorController.cpp b/WebCore/inspector/InspectorController.cpp
index 18b95ab..f742df0 100644
--- a/WebCore/inspector/InspectorController.cpp
+++ b/WebCore/inspector/InspectorController.cpp
@@ -55,6 +55,7 @@
 #include "InjectedScript.h"
 #include "InjectedScriptHost.h"
 #include "InspectorBackend.h"
+#include "InspectorBackendDispatcher.h"
 #include "InspectorCSSStore.h"
 #include "InspectorClient.h"
 #include "InspectorFrontendClient.h"
@@ -192,6 +193,7 @@ InspectorController::InspectorController(Page* page, InspectorClient* client)
     , m_resourceTrackingEnabled(false)
     , m_settingsLoaded(false)
     , m_inspectorBackend(InspectorBackend::create(this))
+    , m_inspectorBackendDispatcher(new InspectorBackendDispatcher(m_inspectorBackend.get()))
     , m_injectedScriptHost(InjectedScriptHost::create(this))
 #if ENABLE(JAVASCRIPT_DEBUGGER)
     , m_debuggerEnabled(false)
diff --git a/WebCore/inspector/InspectorController.h b/WebCore/inspector/InspectorController.h
index 76b88f1..176dd11 100644
--- a/WebCore/inspector/InspectorController.h
+++ b/WebCore/inspector/InspectorController.h
@@ -64,6 +64,7 @@ class HitTestResult;
 class InjectedScript;
 class InjectedScriptHost;
 class InspectorBackend;
+class InspectorBackendDispatcher;
 class InspectorClient;
 class InspectorCSSStore;
 class InspectorDOMStorageResource;
@@ -120,6 +121,7 @@ public:
     ~InspectorController();
 
     InspectorBackend* inspectorBackend() { return m_inspectorBackend.get(); }
+    InspectorBackendDispatcher* inspectorBackendDispatcher() { return m_inspectorBackendDispatcher.get(); }
     InjectedScriptHost* injectedScriptHost() { return m_injectedScriptHost.get(); }
 
     void inspectedPageDestroyed();
@@ -395,6 +397,7 @@ private:
     bool m_resourceTrackingEnabled;
     bool m_settingsLoaded;
     RefPtr<InspectorBackend> m_inspectorBackend;
+    OwnPtr<InspectorBackendDispatcher> m_inspectorBackendDispatcher;
     RefPtr<InjectedScriptHost> m_injectedScriptHost;
 
     typedef HashMap<String, String> Settings;
diff --git a/WebCore/inspector/InspectorValues.cpp b/WebCore/inspector/InspectorValues.cpp
index 90a40f9..d488b50 100644
--- a/WebCore/inspector/InspectorValues.cpp
+++ b/WebCore/inspector/InspectorValues.cpp
@@ -484,6 +484,16 @@ bool InspectorValue::asNumber(double*) const
     return false;
 }
 
+bool InspectorValue::asNumber(long*) const
+{
+    return false;
+}
+
+bool InspectorValue::asNumber(unsigned long*) const
+{
+    return false;
+}
+
 bool InspectorValue::asString(String*) const
 {
     return false;
@@ -540,6 +550,23 @@ bool InspectorBasicValue::asNumber(double* output) const
     return true;
 }
 
+bool InspectorBasicValue::asNumber(long* output) const
+{
+    if (type() != TypeDouble)
+        return false;
+    *output = static_cast<long>(m_doubleValue);
+    return true;
+}
+
+bool InspectorBasicValue::asNumber(unsigned long* output) const
+{
+    if (type() != TypeDouble)
+        return false;
+    *output = static_cast<unsigned long>(m_doubleValue);
+    return true;
+}
+
+
 void InspectorBasicValue::writeJSON(Vector<UChar>* output) const
 {
     ASSERT(type() == TypeBoolean || type() == TypeDouble);
diff --git a/WebCore/inspector/InspectorValues.h b/WebCore/inspector/InspectorValues.h
index a0c0c2d..940bab9 100644
--- a/WebCore/inspector/InspectorValues.h
+++ b/WebCore/inspector/InspectorValues.h
@@ -69,6 +69,8 @@ public:
 
     virtual bool asBool(bool* output) const;
     virtual bool asNumber(double* output) const;
+    virtual bool asNumber(long* output) const;
+    virtual bool asNumber(unsigned long* output) const;
     virtual bool asString(String* output) const;
     virtual PassRefPtr<InspectorObject> asObject();
     virtual PassRefPtr<InspectorArray> asArray();
@@ -105,6 +107,8 @@ public:
 
     virtual bool asBool(bool* output) const;
     virtual bool asNumber(double* output) const;
+    virtual bool asNumber(long* output) const;
+    virtual bool asNumber(unsigned long* output) const;
 
     virtual void writeJSON(Vector<UChar>* output) const;
 
diff --git a/WebCore/inspector/front-end/ElementsPanel.js b/WebCore/inspector/front-end/ElementsPanel.js
index 48eb4c0..ec9559f 100644
--- a/WebCore/inspector/front-end/ElementsPanel.js
+++ b/WebCore/inspector/front-end/ElementsPanel.js
@@ -222,7 +222,7 @@ WebInspector.ElementsPanel.prototype = {
 
         if (this._selectedPathOnReset) {
             var callId = WebInspector.Callback.wrap(selectLastSelectedNode.bind(this));
-            InspectorBackend.pushNodeByPathToFrontend(callId, this._selectedPathOnReset);
+            InspectorBackend.pushNodeByPathToFrontend(callId, this._selectedPathOnReset.join(","));
         } else
             selectNode.call(this);
         delete this._selectedPathOnReset;
diff --git a/WebKit/chromium/ChangeLog b/WebKit/chromium/ChangeLog
index 511a34a..9bf5780 100644
--- a/WebKit/chromium/ChangeLog
+++ b/WebKit/chromium/ChangeLog
@@ -1,3 +1,21 @@
+2010-07-22  Ilya Tikhonovsky  <loislo at chromium.org>
+
+        Reviewed by Yury Semikhatsky.
+
+        WebInspector: CodeGeneratorInspector was extended and now it can
+        generate InspectorBackedDispatcher's code. This dispatcher will
+        validate and dispatch incoming inspector commands only by native
+        code without using javaScript. That is necessary step for
+        RemoteDebugging support.
+        https://bugs.webkit.org/show_bug.cgi?id=42588
+
+        * src/ToolsAgent.h:
+        * src/WebDevToolsAgentImpl.cpp:
+        (WebKit::WebDevToolsAgentImpl::dispatchOnInspectorController):
+        * src/WebDevToolsAgentImpl.h:
+        * src/js/InspectorControllerImpl.js:
+        (devtools.InspectorBackendImpl.prototype.callInspectorController_):
+
 2010-07-22  Darin Fisher  <darin at chromium.org>
 
         Reviewed by David Levin.
diff --git a/WebKit/chromium/src/ToolsAgent.h b/WebKit/chromium/src/ToolsAgent.h
index c748c8a..d878aea 100644
--- a/WebKit/chromium/src/ToolsAgent.h
+++ b/WebKit/chromium/src/ToolsAgent.h
@@ -39,8 +39,8 @@ namespace WebKit {
 // API for auxiliary UI functions such as dom elements highlighting.
 #define TOOLS_AGENT_STRUCT(METHOD0, METHOD1, METHOD2, METHOD3, METHOD4, METHOD5) \
     /* Dispatches given function on the InspectorController object */ \
-    METHOD3(dispatchOnInspectorController, int /* call_id */, \
-        String /* function_name */, String /* json_args */) \
+    METHOD2(dispatchOnInspectorController, int /* call_id */, \
+        String /* message */) \
     \
     /* Dispatches given function on the InjectedScript object */ \
     METHOD5(dispatchOnInjectedScript, int /* call_id */, \
diff --git a/WebKit/chromium/src/WebDevToolsAgentImpl.cpp b/WebKit/chromium/src/WebDevToolsAgentImpl.cpp
index 0d8cbad..6238dd2 100644
--- a/WebKit/chromium/src/WebDevToolsAgentImpl.cpp
+++ b/WebKit/chromium/src/WebDevToolsAgentImpl.cpp
@@ -38,6 +38,7 @@
 #include "EventListener.h"
 #include "InjectedScriptHost.h"
 #include "InspectorBackend.h"
+#include "InspectorBackendDispatcher.h"
 #include "InspectorController.h"
 #include "InspectorFrontend.h"
 #include "InspectorResource.h"
@@ -308,13 +309,11 @@ void WebDevToolsAgentImpl::forceRepaint()
     m_client->forceRepaint();
 }
 
-void WebDevToolsAgentImpl::dispatchOnInspectorController(int callId, const String& functionName, const String& jsonArgs)
+void WebDevToolsAgentImpl::dispatchOnInspectorController(int callId, const String& message)
 {
-    String result;
     String exception;
-    result = m_debuggerAgentImpl->executeUtilityFunction(m_utilityContext, callId,
-        "InspectorControllerDispatcher", functionName, jsonArgs, false /* is sync */, &exception);
-    m_toolsAgentDelegateStub->didDispatchOn(callId, result, exception);
+    inspectorController()->inspectorBackendDispatcher()->dispatch(message, &exception);
+    m_toolsAgentDelegateStub->didDispatchOn(callId, "", exception);
 }
 
 void WebDevToolsAgentImpl::dispatchOnInjectedScript(int callId, int injectedScriptId, const String& functionName, const String& jsonArgs, bool async)
diff --git a/WebKit/chromium/src/WebDevToolsAgentImpl.h b/WebKit/chromium/src/WebDevToolsAgentImpl.h
index 12f51f9..beb5cfa 100644
--- a/WebKit/chromium/src/WebDevToolsAgentImpl.h
+++ b/WebKit/chromium/src/WebDevToolsAgentImpl.h
@@ -72,7 +72,7 @@ public:
     virtual ~WebDevToolsAgentImpl();
 
     // ToolsAgent implementation.
-    virtual void dispatchOnInspectorController(int callId, const WebCore::String& functionName, const WebCore::String& jsonArgs);
+    virtual void dispatchOnInspectorController(int callId, const WebCore::String& message);
     virtual void dispatchOnInjectedScript(int callId, int injectedScriptId, const WebCore::String& functionName, const WebCore::String& jsonArgs, bool async);
 
     // WebDevToolsAgentPrivate implementation.
diff --git a/WebKit/chromium/src/js/InspectorControllerImpl.js b/WebKit/chromium/src/js/InspectorControllerImpl.js
index a795891..30edd9e 100644
--- a/WebKit/chromium/src/js/InspectorControllerImpl.js
+++ b/WebKit/chromium/src/js/InspectorControllerImpl.js
@@ -154,7 +154,8 @@ devtools.InspectorBackendImpl.prototype.installInspectorControllerDelegate_ = fu
 devtools.InspectorBackendImpl.prototype.callInspectorController_ = function(methodName, var_arg)
 {
     var args = Array.prototype.slice.call(arguments, 1);
-    RemoteToolsAgent.dispatchOnInspectorController(WebInspector.Callback.wrap(function(){}), methodName, JSON.stringify(args));
+    args.unshift(methodName);
+    RemoteToolsAgent.dispatchOnInspectorController(WebInspector.Callback.wrap(function(){}), JSON.stringify(args));
 };
 
 

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list