Re: [webkit-dev] WebKit blog post proposal: Remote debugging with Web Inspector.
An update. Pavel WebKit Remote Debugging http://www.webkit.org/blog/?p=1620Posted by *Pavel Feldman* on Saturday, April 30th, 2011 at 1:53 am As you might know, WebKit Web Inspector (aka Chrome Developer Tools) is implemented as an HTML + CSS + JavaScript web application. What you might not know is that Web Inspector can run outside of the rendering engine environment and still provide complete set of its features to the end user. Debugging over the wire Running debugger outside the rendering engine is interesting because mobile platforms do not often provide enough screen real estate for quality debugging; they have network stack and CPU specifics that often affect page load and runtime. Still, they are based on the WebCore rendering engine, they could have Web Inspector instrumentation running and hence expose valuable debugging information to the end user. Now that Web Inspector is functioning out-of-process over the serialized-message-channel, attaching Web Inspector window to the remote rendering engine is possible. Here is an example of the remote debugging session using Chrome Developer Tools: 1. Start your target browser (recent Chromium build or Google Chrome will do) with the remote-debugging-port command line switch: Chromium.app/Contents/MacOS/Chromium --remote-debugging-port=9222 2. Open several pages there. 3. Navigate to the given port from your client browser instance (WebKit nightly or another Chrome instance will do) and it will list inspectable pages opened in the browser as web links. [image: Tab discovery page] 4. Follow any of these links to start remote debugging session for the corresponding page. [image: Tab attached page] You will find remote debugging interface very similar to the Web Inspector / Chrome Developer Tools and here is why: - Target Chrome browser acts as a web server bound to the port 9222 on the localhost. - Once you follow the link, your client browser fetches HTML, JavaScript and CSS files of the Developer Tools front-end over HTTP. - Upon load event, Developer Tools establishes Web Socket connection back to the target browser and starts interchanging JSON messages with it. In fact, pretty much the same scenario takes place within any WebKit-based browser when user opens Web Inspector. The only difference is that the transports being used for the JSON message interchange may vary. Note, that in case of mobile devices, front-end files can also be served from the cloud. Remote Debugging Protocol Another scenario for remote debugging is IDE integration. Web IDEs would like to provide seamless debugging experience integrated into their environments to the end user. Exposing unified WebKit remote debugging protocol would allow them to use alternate front-ends for the WebKit debugging. Under the hood, Web Inspector front-end is talking to the browser backend by means of the Remote Debugging Protocol. This protocol is based on the JSON-RPC 2.0 http://groups.google.com/group/json-rpc/web/json-rpc-2-0 specification. It is bidirectional: clients send asynchronous requests to the server, server responds to these requests and/or generates notifications. Since API surface for general purpose web debugging is huge, we divided it into a number of domains. Each domain contains requests and notifications specific to some area. Here is the list of the domains supported so far: - *Browser Debugger* – allows setting breakpoints on particular DOM operations and events. JavaScript execution will stop on these operations as if there was a regular breakpoint set. - *Console* – defines methods and events for interaction with the JavaScript console. - *CSS* – exposes raw CSS read / write operations. - *Debugger* – exposes JavaScript debugging functions; allows setting and removing breakpoints, stepping through execution, exploring stack traces, etc. - *DOM* – This domain exposes DOM read/write operations. - *Network* – allows tracking network activities of the page; exposes information about HTTP and WebSocket requests and responses, their headers, bodies, raw timing, etc. - *Page* – actions and events related to the inspected page. - *Runtime* – exposes JavaScript runtime by means of remote evaluation and mirror objects. - *Timeline* – provides its clients with instrumentation records that are generated during the page runtime. You can find JSON schema defining the protocol herehttp://trac.webkit.org/browser/trunk/Source/WebCore/inspector/Inspector.json. For your convenience, we generated documentation from this schema and published it on the Chrome DevTools pagehttp://code.google.com/chrome/devtools/docs/remote-debugging.html. Note that there are few unlisted domains such as Application Cache, DOM Storage, and Database, but they are not ready for the prime time yet. What’s next We are now open to the feedback on the WebKit Remote Debugging Protocol. We will collect all the feedback in the form of
Re: [webkit-dev] WebKit blog post proposal: Remote debugging with Web Inspector.
On 04/30/2011 10:55 AM, Pavel Feldman wrote: An update. Did you consider applying for a port number at IANA? Besides that really nice work and a nice article. ___ webkit-dev mailing list webkit-dev@lists.webkit.org http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev
Re: [webkit-dev] WebKit blog post proposal: Remote debugging with Web Inspector.
This seems rather Chrome-centric for a webkit.org blog post. - Mark On 2011-04-30, at 01:55, Pavel Feldman wrote: An update. Pavel WebKit Remote Debugging Posted by Pavel Feldman on Saturday, April 30th, 2011 at 1:53 am As you might know, WebKit Web Inspector (aka Chrome Developer Tools) is implemented as an HTML + CSS + JavaScript web application. What you might not know is that Web Inspector can run outside of the rendering engine environment and still provide complete set of its features to the end user. Debugging over the wire Running debugger outside the rendering engine is interesting because mobile platforms do not often provide enough screen real estate for quality debugging; they have network stack and CPU specifics that often affect page load and runtime. Still, they are based on the WebCore rendering engine, they could have Web Inspector instrumentation running and hence expose valuable debugging information to the end user. Now that Web Inspector is functioning out-of-process over the serialized-message-channel, attaching Web Inspector window to the remote rendering engine is possible. Here is an example of the remote debugging session using Chrome Developer Tools: 1. Start your target browser (recent Chromium build or Google Chrome will do) with the remote-debugging-port command line switch: Chromium.app/Contents/MacOS/Chromium --remote-debugging-port=9222 2. Open several pages there. 3. Navigate to the given port from your client browser instance (WebKit nightly or another Chrome instance will do) and it will list inspectable pages opened in the browser as web links. 4. Follow any of these links to start remote debugging session for the corresponding page. You will find remote debugging interface very similar to the Web Inspector / Chrome Developer Tools and here is why: Target Chrome browser acts as a web server bound to the port 9222 on the localhost. Once you follow the link, your client browser fetches HTML, JavaScript and CSS files of the Developer Tools front-end over HTTP. Upon load event, Developer Tools establishes Web Socket connection back to the target browser and starts interchanging JSON messages with it. In fact, pretty much the same scenario takes place within any WebKit-based browser when user opens Web Inspector. The only difference is that the transports being used for the JSON message interchange may vary. Note, that in case of mobile devices, front-end files can also be served from the cloud. Remote Debugging Protocol Another scenario for remote debugging is IDE integration. Web IDEs would like to provide seamless debugging experience integrated into their environments to the end user. Exposing unified WebKit remote debugging protocol would allow them to use alternate front-ends for the WebKit debugging. Under the hood, Web Inspector front-end is talking to the browser backend by means of the Remote Debugging Protocol. This protocol is based on the JSON-RPC 2.0 specification. It is bidirectional: clients send asynchronous requests to the server, server responds to these requests and/or generates notifications. Since API surface for general purpose web debugging is huge, we divided it into a number of domains. Each domain contains requests and notifications specific to some area. Here is the list of the domains supported so far: Browser Debugger – allows setting breakpoints on particular DOM operations and events. JavaScript execution will stop on these operations as if there was a regular breakpoint set. Console – defines methods and events for interaction with the JavaScript console. CSS – exposes raw CSS read / write operations. Debugger – exposes JavaScript debugging functions; allows setting and removing breakpoints, stepping through execution, exploring stack traces, etc. DOM – This domain exposes DOM read/write operations. Network – allows tracking network activities of the page; exposes information about HTTP and WebSocket requests and responses, their headers, bodies, raw timing, etc. Page – actions and events related to the inspected page. Runtime – exposes JavaScript runtime by means of remote evaluation and mirror objects. Timeline – provides its clients with instrumentation records that are generated during the page runtime. You can find JSON schema defining the protocol here. For your convenience, we generated documentation from this schema and published it on the Chrome DevTools page. Note that there are few unlisted domains such as Application Cache, DOM Storage, and Database, but they are not ready for the prime time yet. What’s next We are now open to the feedback on the WebKit Remote Debugging Protocol. We will collect all the feedback in the form of the bug reports and the Chrome DevTools forum messages. We will then address initial feedback, polish the protocol a bit and publish its
Re: [webkit-dev] WebKit blog post proposal: Remote debugging with Web Inspector.
This is really about the Web Inspector + about the new protocol that is a part of Web Inspector. The whole point of the post is that the same protocol is used for any WebKit-based product. Chrome is there as a proof of concept demo only. We need some shiny demo material for post so that people could see it and try it themselves. Otherwise, it becomes a boring chunk of text. I could use screenshots with Playbook's capabilities ( http://www.berryreview.com/2011/04/15/hot-webkit-web-inspector-on-the-blackberry-playbook-for-web-developers/) or both Chrome and Playbook. Any RIM people around? Thanks Pavel On Sat, Apr 30, 2011 at 2:23 PM, Mark Rowe mr...@apple.com wrote: This seems rather Chrome-centric for a webkit.org blog post. - Mark On 2011-04-30, at 01:55, Pavel Feldman wrote: An update. Pavel WebKit Remote Debugging http://www.webkit.org/blog/?p=1620 Posted by *Pavel Feldman* on Saturday, April 30th, 2011 at 1:53 am As you might know, WebKit Web Inspector (aka Chrome Developer Tools) is implemented as an HTML + CSS + JavaScript web application. What you might not know is that Web Inspector can run outside of the rendering engine environment and still provide complete set of its features to the end user. Debugging over the wire Running debugger outside the rendering engine is interesting because mobile platforms do not often provide enough screen real estate for quality debugging; they have network stack and CPU specifics that often affect page load and runtime. Still, they are based on the WebCore rendering engine, they could have Web Inspector instrumentation running and hence expose valuable debugging information to the end user. Now that Web Inspector is functioning out-of-process over the serialized-message-channel, attaching Web Inspector window to the remote rendering engine is possible. Here is an example of the remote debugging session using Chrome Developer Tools: 1. Start your target browser (recent Chromium build or Google Chrome will do) with the remote-debugging-port command line switch: Chromium.app/Contents/MacOS/Chromium --remote-debugging-port=9222 2. Open several pages there. 3. Navigate to the given port from your client browser instance (WebKit nightly or another Chrome instance will do) and it will list inspectable pages opened in the browser as web links. [image: Tab discovery page] 4. Follow any of these links to start remote debugging session for the corresponding page. [image: Tab attached page] You will find remote debugging interface very similar to the Web Inspector / Chrome Developer Tools and here is why: - Target Chrome browser acts as a web server bound to the port 9222 on the localhost. - Once you follow the link, your client browser fetches HTML, JavaScript and CSS files of the Developer Tools front-end over HTTP. - Upon load event, Developer Tools establishes Web Socket connection back to the target browser and starts interchanging JSON messages with it. In fact, pretty much the same scenario takes place within any WebKit-based browser when user opens Web Inspector. The only difference is that the transports being used for the JSON message interchange may vary. Note, that in case of mobile devices, front-end files can also be served from the cloud. Remote Debugging Protocol Another scenario for remote debugging is IDE integration. Web IDEs would like to provide seamless debugging experience integrated into their environments to the end user. Exposing unified WebKit remote debugging protocol would allow them to use alternate front-ends for the WebKit debugging. Under the hood, Web Inspector front-end is talking to the browser backend by means of the Remote Debugging Protocol. This protocol is based on the JSON-RPC 2.0 http://groups.google.com/group/json-rpc/web/json-rpc-2-0 specification. It is bidirectional: clients send asynchronous requests to the server, server responds to these requests and/or generates notifications. Since API surface for general purpose web debugging is huge, we divided it into a number of domains. Each domain contains requests and notifications specific to some area. Here is the list of the domains supported so far: - *Browser Debugger* – allows setting breakpoints on particular DOM operations and events. JavaScript execution will stop on these operations as if there was a regular breakpoint set. - *Console* – defines methods and events for interaction with the JavaScript console. - *CSS* – exposes raw CSS read / write operations. - *Debugger* – exposes JavaScript debugging functions; allows setting and removing breakpoints, stepping through execution, exploring stack traces, etc. - *DOM* – This domain exposes DOM read/write operations. - *Network* – allows tracking network activities of the page; exposes information about HTTP and WebSocket requests and responses, their headers, bodies, raw
Re: [webkit-dev] WebKit blog post proposal: Remote debugging with Web Inspector.
I think Mark's point was more about phrasing like WebKit Web Inspector (aka Chrome Developer Tools) or You will find remote debugging interface very similar to the Web Inspector / Chrome Developer Tools and here is why: Target Chrome browser acts as. I think that objection is reasonable. Perhaps you could rearrange the post to be solely about the WebKit-specific parts, and include a link to a Chrome blog post with details for Chrome users. On Sat, Apr 30, 2011 at 3:23 AM, Mark Rowe mr...@apple.com wrote: This seems rather Chrome-centric for a webkit.org blog post. - Mark On 2011-04-30, at 01:55, Pavel Feldman wrote: An update. Pavel WebKit Remote Debugging http://www.webkit.org/blog/?p=1620 Posted by *Pavel Feldman* on Saturday, April 30th, 2011 at 1:53 am As you might know, WebKit Web Inspector (aka Chrome Developer Tools) is implemented as an HTML + CSS + JavaScript web application. What you might not know is that Web Inspector can run outside of the rendering engine environment and still provide complete set of its features to the end user. Debugging over the wire Running debugger outside the rendering engine is interesting because mobile platforms do not often provide enough screen real estate for quality debugging; they have network stack and CPU specifics that often affect page load and runtime. Still, they are based on the WebCore rendering engine, they could have Web Inspector instrumentation running and hence expose valuable debugging information to the end user. Now that Web Inspector is functioning out-of-process over the serialized-message-channel, attaching Web Inspector window to the remote rendering engine is possible. Here is an example of the remote debugging session using Chrome Developer Tools: 1. Start your target browser (recent Chromium build or Google Chrome will do) with the remote-debugging-port command line switch: Chromium.app/Contents/MacOS/Chromium --remote-debugging-port=9222 2. Open several pages there. 3. Navigate to the given port from your client browser instance (WebKit nightly or another Chrome instance will do) and it will list inspectable pages opened in the browser as web links. [image: Tab discovery page] 4. Follow any of these links to start remote debugging session for the corresponding page. [image: Tab attached page] You will find remote debugging interface very similar to the Web Inspector / Chrome Developer Tools and here is why: - Target Chrome browser acts as a web server bound to the port 9222 on the localhost. - Once you follow the link, your client browser fetches HTML, JavaScript and CSS files of the Developer Tools front-end over HTTP. - Upon load event, Developer Tools establishes Web Socket connection back to the target browser and starts interchanging JSON messages with it. In fact, pretty much the same scenario takes place within any WebKit-based browser when user opens Web Inspector. The only difference is that the transports being used for the JSON message interchange may vary. Note, that in case of mobile devices, front-end files can also be served from the cloud. Remote Debugging Protocol Another scenario for remote debugging is IDE integration. Web IDEs would like to provide seamless debugging experience integrated into their environments to the end user. Exposing unified WebKit remote debugging protocol would allow them to use alternate front-ends for the WebKit debugging. Under the hood, Web Inspector front-end is talking to the browser backend by means of the Remote Debugging Protocol. This protocol is based on the JSON-RPC 2.0 http://groups.google.com/group/json-rpc/web/json-rpc-2-0 specification. It is bidirectional: clients send asynchronous requests to the server, server responds to these requests and/or generates notifications. Since API surface for general purpose web debugging is huge, we divided it into a number of domains. Each domain contains requests and notifications specific to some area. Here is the list of the domains supported so far: - *Browser Debugger* – allows setting breakpoints on particular DOM operations and events. JavaScript execution will stop on these operations as if there was a regular breakpoint set. - *Console* – defines methods and events for interaction with the JavaScript console. - *CSS* – exposes raw CSS read / write operations. - *Debugger* – exposes JavaScript debugging functions; allows setting and removing breakpoints, stepping through execution, exploring stack traces, etc. - *DOM* – This domain exposes DOM read/write operations. - *Network* – allows tracking network activities of the page; exposes information about HTTP and WebSocket requests and responses, their headers, bodies, raw timing, etc. - *Page* – actions and events related to the inspected page. - *Runtime* – exposes JavaScript runtime by means of remote evaluation and
Re: [webkit-dev] WebKit blog post proposal: Remote debugging with Web Inspector.
I see. It might be unfortunate branding, but the large amount of Web Inspector users refer to it as Developer Tools. We use every opportunity to tell users that it is the same thing, but this is not enough. The first question we always get is Do you guys upstream any of your Chrome Dev Tools code into the WebKit?. Which sounds crazy, because 100% of the code is upstream. So it is probably just me trying to use both names to fix this. It sounds like I should be more formal in this case and make the letter of the post conform to its WebKit spirit. - I changed the phrasing to use Web Inspector only, there is no mention of Chrome Dev Tools anymore. - Removed all Chrome mentions as well - There is now single mention of Chromium in the example scenario that I am eager to keep. I truly believe that the example makes the post more lively. There is nothing easier than posting this whole thing at chromium.org, but it will harm the unified WebKit Remote Debugging Protocol message we are trying to deliver. provocativeIn return, can I ask to rename the WebKit blog from Surfin' Safari to something more WebKit-specific?/provocative So here is another update (posting the first topics that have changed). Mark, Evan, do you think it is better now? WebKit Remote Debugging http://www.webkit.org/blog/?p=1620Posted by *Pavel Feldman* on Saturday, April 30th, 2011 at 10:06 pm As you might know, WebKit Web Inspector is implemented as an HTML + CSS + JavaScript web application. What you might not know is that Web Inspector can run outside of the rendering engine environment and still provide complete set of its features to the end user. Debugging over the wire Running debugger outside the rendering engine is interesting because mobile platforms do not often provide enough screen real estate for quality debugging; they have network stack and CPU specifics that often affect page load and runtime. Still, they are based on the WebCore rendering engine, they could have Web Inspector instrumentation running and hence expose valuable debugging information to the end user. Now that Web Inspector is functioning out-of-process over the serialized-message-channel, attaching Web Inspector window to the remote rendering engine is possible. Here is an example of the remote debugging session using Chromium: 1. Start your target browser with the remote-debugging-port command line switch: Chromium --remote-debugging-port=9222 2. Open several pages there. 3. Navigate to the given port from your client browser instance (WebKit nightly will do) and it will list inspectable pages opened in the browser as web links. [image: Tab discovery page] 4. Follow any of these links to start remote debugging session for the corresponding page. [image: Tab attached page] You will find remote debugging interface very similar to the Web Inspector and here is why: - Target browser acts as a web server bound to the port 9222 on the localhost. - Once you follow the link, your client browser fetches HTML, JavaScript and CSS files of the Web Inspector front-end over HTTP. - Upon load event, Web Inspector establishes Web Socket connection back to the target browser and starts interchanging JSON messages with it. In fact, pretty much the same scenario takes place within any WebKit-based browser when user opens Web Inspector. The only difference is that the transports being used for the JSON message interchange may vary. Note, that in case of mobile devices, front-end files can also be served from the cloud. On Sun, May 1, 2011 at 1:32 AM, Evan Martin e...@chromium.org wrote: I think Mark's point was more about phrasing like WebKit Web Inspector (aka Chrome Developer Tools) or You will find remote debugging interface very similar to the Web Inspector / Chrome Developer Tools and here is why: Target Chrome browser acts as. I think that objection is reasonable. Perhaps you could rearrange the post to be solely about the WebKit-specific parts, and include a link to a Chrome blog post with details for Chrome users. On Sat, Apr 30, 2011 at 3:23 AM, Mark Rowe mr...@apple.com wrote: This seems rather Chrome-centric for a webkit.org blog post. - Mark On 2011-04-30, at 01:55, Pavel Feldman wrote: An update. Pavel WebKit Remote Debugging http://www.webkit.org/blog/?p=1620 Posted by *Pavel Feldman* on Saturday, April 30th, 2011 at 1:53 am As you might know, WebKit Web Inspector (aka Chrome Developer Tools) is implemented as an HTML + CSS + JavaScript web application. What you might not know is that Web Inspector can run outside of the rendering engine environment and still provide complete set of its features to the end user. Debugging over the wire Running debugger outside the rendering engine is interesting because mobile platforms do not often provide enough screen real estate for quality debugging; they have network stack and CPU specifics that often affect page load and runtime. Still, they are based on the
Re: [webkit-dev] WebKit blog post proposal: Remote debugging with Web Inspector.
On 2011-04-30, at 22:11, Pavel Feldman wrote: I see. It might be unfortunate branding, but the large amount of Web Inspector users refer to it as Developer Tools. We use every opportunity to tell users that it is the same thing, but this is not enough. The first question we always get is Do you guys upstream any of your Chrome Dev Tools code into the WebKit?. Which sounds crazy, because 100% of the code is upstream. So it is probably just me trying to use both names to fix this. It sounds like I should be more formal in this case and make the letter of the post conform to its WebKit spirit. - I changed the phrasing to use Web Inspector only, there is no mention of Chrome Dev Tools anymore. - Removed all Chrome mentions as well - There is now single mention of Chromium in the example scenario that I am eager to keep. I truly believe that the example makes the post more lively. There is nothing easier than posting this whole thing at chromium.org, but it will harm the unified WebKit Remote Debugging Protocol message we are trying to deliver. provocativeIn return, can I ask to rename the WebKit blog from Surfin' Safari to something more WebKit-specific?/provocative I've wondered the same thing myself on several occasions. So here is another update (posting the first topics that have changed). Mark, Evan, do you think it is better now? The update certainly addresses my concerns. - Mark ___ webkit-dev mailing list webkit-dev@lists.webkit.org http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev
Re: [webkit-dev] Strict OwnPtr now (partially) enabled
Update: Strict mode for OwnPtr is now turned on for Mac, Chromium, Qt, and GTK (thanks Ossy and mrobinson!). http://trac.webkit.org/browser/trunk/Source/JavaScriptCore/wtf/OwnPtr.h#L32 I'd like to turn this on for all ports early this week. I don't have a good way of not breaking the build in platform-specific files that I can't build personally. If you're interested in a port that's not on the list, please consider turning it on for your port (e.g., by creating a bug blocking https://bugs.webkit.org/show_bug.cgi?id=59428 and uploading a patch). Generally, there shouldn't be too much work to do anymore because most files in the project are covered already. At some point next week, I'm going to enable strict mode everywhere and do battle with the bots. Thanks! Adam On Wed, Apr 27, 2011 at 3:31 PM, Adam Barth aba...@webkit.org wrote: Thanks to a bunch of hard work at the WebKit meeting (both as part of the OwnPtr hack-a-thon and after hours), we've now enabled strict OwnPtr semantics on PLATFORM(MAC). Other platforms should follow shortly as we work through the platform-specific files. The strict semantics mean you'll no longer be able to store a raw pointer in an OwnPtr without first calling adoptPtr. Ideally, you should call adoptPtr immediately after calling new: adoptPtr(new AwesomeClass(42)) OwnPtr will ensure that the allocated memory is freed exactly once, avoiding memory leaks and double-frees. There's still some more work to enable strict mode for PassOwnPtr, but hopefully we'll be able to turn that on soon as well. Thanks for all your help everyone, and happy memory management! Adam ___ webkit-dev mailing list webkit-dev@lists.webkit.org http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev