WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED FIXED
Bug 40675
Web Inspector: native serialization support in the bindings for WebInspector.
https://bugs.webkit.org/show_bug.cgi?id=40675
Summary
Web Inspector: native serialization support in the bindings for WebInspector.
Ilya Tikhonovsky
Reported
2010-06-16 05:47:07 PDT
On the way to Remote Debuging we want to support JSON serialization on both sides of WebInspector transport. As far as InspectorFrontend class is a simple proxy to WebInspector it would be better to generate it from an IDL file. We have generator infostructure for binding and will reuse it for new generator.
Attachments
[patch] initial version.
(81.77 KB, patch)
2010-06-16 06:02 PDT
,
Ilya Tikhonovsky
pfeldman
: review-
Details
Formatted Diff
Diff
[patch] second iteration
(85.15 KB, patch)
2010-06-17 03:10 PDT
,
Ilya Tikhonovsky
yurys
: review-
Details
Formatted Diff
Diff
[patch] second iteration. rebaselined.
(66.32 KB, patch)
2010-06-17 04:49 PDT
,
Ilya Tikhonovsky
loislo
: review-
loislo
: commit-queue-
Details
Formatted Diff
Diff
[patch] third iteration. with new files.
(80.52 KB, patch)
2010-06-17 04:57 PDT
,
Ilya Tikhonovsky
yurys
: review-
yurys
: commit-queue-
Details
Formatted Diff
Diff
[patch] fourth iteration.
(80.70 KB, patch)
2010-06-17 07:34 PDT
,
Ilya Tikhonovsky
yurys
: review-
Details
Formatted Diff
Diff
[patch] next iteration.
(75.49 KB, patch)
2010-06-19 09:26 PDT
,
Ilya Tikhonovsky
no flags
Details
Formatted Diff
Diff
[patch] rebaselined. for check at trybots.
(75.73 KB, patch)
2010-07-05 05:29 PDT
,
Ilya Tikhonovsky
no flags
Details
Formatted Diff
Diff
[patch] Minimized version without generator.
(41.94 KB, patch)
2010-07-05 08:15 PDT
,
Ilya Tikhonovsky
yurys
: review+
Details
Formatted Diff
Diff
Show Obsolete
(7)
View All
Add attachment
proposed patch, testcase, etc.
Ilya Tikhonovsky
Comment 1
2010-06-16 06:02:20 PDT
Created
attachment 58890
[details]
[patch] initial version.
Yury Semikhatsky
Comment 2
2010-06-16 06:45:14 PDT
Comment on
attachment 58890
[details]
[patch] initial version. WebCore/WebCore.gyp/WebCore.gyp:624 + 'generator_include_dirs': [ why do you need this? WebCore/bindings/scripts/CodeGeneratorWI.pm:108 + * 1. Redistributions of source code must retain the above copyright Please fix the license header. WebCore/bindings/scripts/IDLStructure.pm:83 + our $supportedTypes = "((?:unsigned )?(?:int|short|(?:long )?long)|(?:$idlIdNs*))"; revert? WebCore/inspector/InspectorFrontend2.wii:72 + // void pausedScript(SerializedScriptValue* callFrames); remove all commented code WebCore/inspector/TimelineRecordFactory.cpp:53 + // if (ScriptCallStack::stackTrace(5, frontend->scriptState(), stackTrace)) Please uncomment this. Also I don't understand why ScriptState used here is that of the front end. WebKit/gtk/ChangeLog:5 + WebInspector: bugfix. Change log should be more descriptive. WebKit/qt/ChangeLog:5 + WebInspector: bugfix. Change log should be more descriptive. WebCore/CMakeLists.txt:290 + inspector/InspectorFrontend2.wii I really don't like the idea of using .wii extension for idl files just to associate them with another code generator. Is it possible to leave .idl extension for them?
WebKit Review Bot
Comment 3
2010-06-16 06:52:12 PDT
Attachment 58890
[details]
did not build on chromium: Build output:
http://webkit-commit-queue.appspot.com/results/3314227
Pavel Feldman
Comment 4
2010-06-16 08:26:41 PDT
Comment on
attachment 58890
[details]
[patch] initial version. Our IDL is not for bindings, so that the generation process should be separate. I don't think we can get away with current approach.
Ilya Tikhonovsky
Comment 5
2010-06-17 03:10:21 PDT
Created
attachment 58975
[details]
[patch] second iteration .wii extension was changed to .inspector CodeGeneratorWI.pm was moved to inspector folder as CodeGeneratorInspector.pm StackTrace support was implemented. Other minor changes.
Yury Semikhatsky
Comment 6
2010-06-17 04:43:55 PDT
Comment on
attachment 58975
[details]
[patch] second iteration WebCore/WebCore.gyp/WebCore.gyp:613 + '../inspector/CodeGeneratorInspector.pm', Can we put this to inspector/scripts/ the same way as with bindings? WebCore/bindings/scripts/generate-bindings.pl:59 + #die('Must specify IDL search path.') unless @idlDirectories; Remove this line? WebCore/bindings/v8/ScriptCallStack.cpp:100 + v8::Context::Scope contextScope(v8::Context::GetCurrent()); There may be no current context. Please add a check. WebCore/inspector/CodeGeneratorInspector.pm:1 + # Copyright (C) 2005, 2006 Nikolas Zimmermann <
zimmermann@kde.org
> Please change the license header. WebCore/CMakeLists.txt:290 + inspector/InspectorFrontend2.inspector Maybe .inspectoridl or something like that, it would be too long though.
Ilya Tikhonovsky
Comment 7
2010-06-17 04:49:15 PDT
Created
attachment 58978
[details]
[patch] second iteration. rebaselined.
WebKit Review Bot
Comment 8
2010-06-17 04:51:53 PDT
Attachment 58978
[details]
did not pass style-queue: Failed to run "['WebKitTools/Scripts/check-webkit-style', '--no-squash']" exit_code: 1 WebCore/inspector/TimelineRecordFactory.cpp:55: One line control clauses should not use braces. [whitespace/braces] [4] Total errors found: 1 in 30 files If any of these errors are false positives, please file a bug against check-webkit-style.
Ilya Tikhonovsky
Comment 9
2010-06-17 04:55:01 PDT
Comment on
attachment 58978
[details]
[patch] second iteration. rebaselined. two files are missing
Ilya Tikhonovsky
Comment 10
2010-06-17 04:57:16 PDT
Created
attachment 58979
[details]
[patch] third iteration. with new files.
Early Warning System Bot
Comment 11
2010-06-17 05:01:56 PDT
Attachment 58978
[details]
did not build on qt: Build output:
http://webkit-commit-queue.appspot.com/results/3285276
WebKit Review Bot
Comment 12
2010-06-17 05:31:43 PDT
Attachment 58979
[details]
did not build on chromium: Build output:
http://webkit-commit-queue.appspot.com/results/3319262
Yury Semikhatsky
Comment 13
2010-06-17 05:38:48 PDT
Please address the comments at least those regarding v8::Context.
Ilya Tikhonovsky
Comment 14
2010-06-17 07:34:24 PDT
Created
attachment 58993
[details]
[patch] fourth iteration. inspector -> inspectorIDL ScriptCallStack was fixed. License was fixed.
Yury Semikhatsky
Comment 15
2010-06-17 07:56:58 PDT
Comment on
attachment 58993
[details]
[patch] fourth iteration. WebCore/bindings/v8/ScriptCallStack.cpp:102 + if (context.IsEmpty()) You don't need this check because of the one above. Please remove. WebCore/bindings/v8/ScriptCallStack.cpp:104 + v8::HandleScope scope; This line should go before v8::Context::GetCurrent() call which returns a local handle. r- for that, otherwise looks good.
Pavel Feldman
Comment 16
2010-06-17 13:24:45 PDT
Comment on
attachment 58993
[details]
[patch] fourth iteration. WebCore/GNUmakefile.am:324 + INSPECTOR_INTERFACES += WebCore/inspector/InspectorFrontend2.inspectorIDL Could we please use standard .idl extension? WebCore/WebCore.gypi:197 + 'inspector/InspectorFrontend2.inspectorIDL', We can create a separate folder for new idl files and call it 'remote' if this makes life of your code generator easier. WebCore/WebCore.vcproj/WebCore.vcproj:20068 + RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\WebInspectorFrontend2.cpp" Nit: I would use 'Remote' as a part of the name. Such as 'RemoteInspectorFrontend'. WebCore/inspector/InspectorTimelineAgent.cpp: + ScriptObject record = TimelineRecordFactory::createGenericRecord(m_frontend, i->startTime); I think apu agent is sniffing those on the chromium side. So the change is going to break SpeedTracer and alike. r- for that.
Joseph Pecoraro
Comment 17
2010-06-17 22:15:12 PDT
> +$typeTransform{"Object"} = { > + "param" => "const RefPtr<InspectorObject>&", > + "return" => "PassRefPtr<InspectorObject>", > + "forward" => "InspectorObject", > + "header" => "InspectorValues.h", > + "push" => "push" > +};
This uses "return" and all the others use "retVal". Easy to overlook because, as expected, the entire interface returns "void" =) --------------------------------- I see some missing functions in InspectorFrontend2.inspectorIDL that are in InspectorFrontend.h. I take it, based on their non-simple implementations that these would need to be manually implemented. Some of them have simple implementations. But would it be worth adding these to the inspectorIDL file, but commenting them out so they are remembered? ------ void addConsoleMessage(const ScriptObject& messageObj, const Vector<ScriptString>& frames, const Vector<RefPtr<SerializedScriptValue> >& arguments, const String& message); void pausedScript(SerializedScriptValue* callFrames); #if ENABLE(WORKERS) void didCreateWorker(const InspectorWorkerResource&); void didDestroyWorker(const InspectorWorkerResource&); #endif // ENABLE(WORKER) void didEditScriptSource(long callId, bool success, const String& result, SerializedScriptValue* newCallFrames); void didGetScriptSource(long callId, const String& result); void didDispatchOnInjectedScript(long callId, SerializedScriptValue* result, bool isException); ------ Also, in InspectorFrontend these returns a bool, but its void in the new version: ------ bool updateResource(unsigned long identifier, const ScriptObject& resourceObj); bool addDatabase(const ScriptObject& dbObj); bool addDOMStorage(const ScriptObject& domStorageObj); ------ void updateResource(in unsigned long identifier, in Object resourceObj); void addDatabase(in Object dbObj); void addDOMStorage(in Object domStorageObj); ------ It looks like the addDOMStorage's return value is never used, so that could certainly be changed to void in both files for now. I'm guessing the others as well. I think it would be worth changing the original file to void (or the new version to bool) to keep them in sync again. Many of the build file changes look like pure magic to me, so I'm trusting all of your judgement =)
Ilya Tikhonovsky
Comment 18
2010-06-18 06:20:15 PDT
(In reply to
comment #17
)
> > +$typeTransform{"Object"} = { > > + "param" => "const RefPtr<InspectorObject>&", > > + "return" => "PassRefPtr<InspectorObject>", > > + "forward" => "InspectorObject", > > + "header" => "InspectorValues.h", > > + "push" => "push" > > +}; > > This uses "return" and all the others use "retVal". > Easy to overlook because, as expected, the entire > interface returns "void" =)
fixed.
> I see some missing functions in InspectorFrontend2.inspectorIDL that are > in InspectorFrontend.h. I take it, based on their non-simple implementations > that these would need to be manually implemented. Some of them have simple > implementations. But would it be worth adding these to the inspectorIDL > file, but commenting them out so they are remembered?
I'll keep only one currently used function. All the others will be added later in order of changing corresponding *inspector*Agents.
Ilya Tikhonovsky
Comment 19
2010-06-19 09:26:12 PDT
Created
attachment 59186
[details]
[patch] next iteration. idl extension is used.
WebKit Review Bot
Comment 20
2010-06-19 09:51:23 PDT
Attachment 59186
[details]
did not build on chromium: Build output:
http://webkit-commit-queue.appspot.com/results/3328380
Ilya Tikhonovsky
Comment 21
2010-07-05 05:29:45 PDT
Created
attachment 60517
[details]
[patch] rebaselined. for check at trybots.
WebKit Review Bot
Comment 22
2010-07-05 05:48:49 PDT
Attachment 60517
[details]
did not build on chromium: Build output:
http://webkit-commit-queue.appspot.com/results/3409251
Yury Semikhatsky
Comment 23
2010-07-05 07:10:37 PDT
Comment on
attachment 60517
[details]
[patch] rebaselined. for check at trybots. WebCore/bindings/js/ScriptCallStack.h:60 + static bool stackTrace(int, const RefPtr<InspectorArray>&); Changes related to ScriptCallStack may well go in its own patch. Could you file a separate bug and create a separate patch for that? This would reduce the size of this huge patch.
Ilya Tikhonovsky
Comment 24
2010-07-05 08:15:18 PDT
Created
attachment 60538
[details]
[patch] Minimized version without generator.
Yury Semikhatsky
Comment 25
2010-07-05 08:33:15 PDT
Comment on
attachment 60538
[details]
[patch] Minimized version without generator. WebCore/ChangeLog:9 + infostructure for binding and will reuse it for new generator. typo: infostructure -> infrastructure
Ilya Tikhonovsky
Comment 26
2010-07-06 04:44:26 PDT
Committing to
http://svn.webkit.org/repository/webkit/trunk
... M WebCore/ChangeLog M WebCore/bindings/js/ScriptCallStack.cpp M WebCore/bindings/js/ScriptCallStack.h M WebCore/bindings/v8/ScriptCallStack.cpp M WebCore/bindings/v8/ScriptCallStack.h M WebCore/inspector/InspectorFrontend.cpp M WebCore/inspector/InspectorFrontend.h M WebCore/inspector/InspectorTimelineAgent.cpp M WebCore/inspector/InspectorTimelineAgent.h M WebCore/inspector/TimelineRecordFactory.cpp M WebCore/inspector/TimelineRecordFactory.h M WebKit/chromium/src/WebDevToolsAgentImpl.cpp M WebKit/gtk/ChangeLog M WebKit/gtk/WebCoreSupport/InspectorClientGtk.cpp M WebKit/qt/ChangeLog M WebKit/qt/WebCoreSupport/InspectorClientQt.cpp Committed
r62542
Joseph Pecoraro
Comment 27
2010-07-06 12:10:57 PDT
I think all those functions returning a RefPtr should instead return a PassRefPtr, by doing "return data.release()". See the examples on:
http://webkit.org/coding/RefPtr.html
> If a function’s result is a new object or ownership is being > transferred for any other reason, the result should be a PassRefPtr. > Since local variables are typically RefPtr, it’s common to call > release in the return statement to transfer the RefPtr to the > PassRefPtr.
I think the current approach does extra reference count arithmetic.
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug