[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc
yurys at chromium.org
yurys at chromium.org
Wed Dec 22 12:03:34 UTC 2010
The following commit has been merged in the debian/experimental branch:
commit 5ec4820ef03bd38c76ac8cb57779e474320467b6
Author: yurys at chromium.org <yurys at chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Fri Aug 13 06:58:27 2010 +0000
2010-08-12 Yury Semikhatsky <yurys at chromium.org>
Reviewed by Pavel Feldman.
Web Inspector: allow interrupting long running JS to execute inspector command
https://bugs.webkit.org/show_bug.cgi?id=43900
* bindings/v8/ScriptDebugServer.cpp:
(WebCore::):
(WebCore::ScriptDebugServer::pause):
(WebCore::ScriptDebugServer::interruptAndRun):
(WebCore::ScriptDebugServer::runPendingTasks):
(WebCore::ScriptDebugServer::handleV8DebugEvent):
* bindings/v8/ScriptDebugServer.h:
(WebCore::ScriptDebugServer::Task::~Task):
2010-08-12 Yury Semikhatsky <yurys at chromium.org>
Reviewed by Pavel Feldman.
Web Inspector: allow interrupting long running JS to execute inspector command
https://bugs.webkit.org/show_bug.cgi?id=43900
* public/WebDevToolsAgent.h:
(WebKit::WebDevToolsAgent::MessageDescriptor::~MessageDescriptor):
* src/WebDevToolsAgentImpl.cpp:
(WebKit::WebDevToolsAgent::interruptAndDispatch):
(WebKit::WebDevToolsAgent::shouldInterruptForMessage):
(WebKit::WebDevToolsAgent::processPendingMessages):
* src/WebDevToolsFrontendImpl.cpp:
(WebKit::WebDevToolsFrontendImpl::WebDevToolsFrontendImpl):
* src/WebDevToolsFrontendImpl.h:
* src/js/DevTools.js:
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@65304 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index fe517c5..6c27ce0 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,19 @@
+2010-08-12 Yury Semikhatsky <yurys at chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: allow interrupting long running JS to execute inspector command
+ https://bugs.webkit.org/show_bug.cgi?id=43900
+
+ * bindings/v8/ScriptDebugServer.cpp:
+ (WebCore::):
+ (WebCore::ScriptDebugServer::pause):
+ (WebCore::ScriptDebugServer::interruptAndRun):
+ (WebCore::ScriptDebugServer::runPendingTasks):
+ (WebCore::ScriptDebugServer::handleV8DebugEvent):
+ * bindings/v8/ScriptDebugServer.h:
+ (WebCore::ScriptDebugServer::Task::~Task):
+
2010-08-12 Sheriff Bot <webkit.review.bot at gmail.com>
Unreviewed, rolling out r65295.
diff --git a/WebCore/bindings/v8/ScriptDebugServer.cpp b/WebCore/bindings/v8/ScriptDebugServer.cpp
index 0a432b7..0c24678 100644
--- a/WebCore/bindings/v8/ScriptDebugServer.cpp
+++ b/WebCore/bindings/v8/ScriptDebugServer.cpp
@@ -44,6 +44,19 @@
namespace WebCore {
+namespace {
+
+class ClientDataImpl : public v8::Debug::ClientData {
+public:
+ ClientDataImpl(PassOwnPtr<ScriptDebugServer::Task> task) : m_task(task) { }
+ virtual ~ClientDataImpl() { }
+ ScriptDebugServer::Task* task() const { return m_task.get(); }
+private:
+ OwnPtr<ScriptDebugServer::Task> m_task;
+};
+
+}
+
static Frame* retrieveFrame(v8::Handle<v8::Context> context)
{
if (context.IsEmpty())
@@ -209,6 +222,12 @@ void ScriptDebugServer::setPauseOnExceptionsState(PauseOnExceptionsState pauseOn
setPauseOnExceptionsFunction->Call(m_debuggerScript.get(), 1, argv);
}
+void ScriptDebugServer::pause()
+{
+ if (!m_pausedPage)
+ v8::Debug::DebugBreak();
+}
+
void ScriptDebugServer::continueProgram()
{
if (m_pausedPage)
@@ -294,6 +313,16 @@ bool ScriptDebugServer::isDebuggerAlwaysEnabled()
return m_enabled;
}
+void ScriptDebugServer::interruptAndRun(PassOwnPtr<Task> task)
+{
+ v8::Debug::DebugBreakForCommand(new ClientDataImpl(task));
+}
+
+void ScriptDebugServer::runPendingTasks()
+{
+ v8::Debug::ProcessDebugMessages();
+}
+
void ScriptDebugServer::v8DebugEventCallback(const v8::Debug::EventDetails& eventDetails)
{
ScriptDebugServer::shared().handleV8DebugEvent(eventDetails);
@@ -302,6 +331,13 @@ void ScriptDebugServer::v8DebugEventCallback(const v8::Debug::EventDetails& even
void ScriptDebugServer::handleV8DebugEvent(const v8::Debug::EventDetails& eventDetails)
{
v8::DebugEvent event = eventDetails.GetEvent();
+
+ if (event == v8::BreakForCommand) {
+ ClientDataImpl* data = static_cast<ClientDataImpl*>(eventDetails.GetClientData());
+ data->task()->run();
+ return;
+ }
+
if (event != v8::Break && event != v8::Exception && event != v8::AfterCompile)
return;
diff --git a/WebCore/bindings/v8/ScriptDebugServer.h b/WebCore/bindings/v8/ScriptDebugServer.h
index 57d5566..a1e0a47 100644
--- a/WebCore/bindings/v8/ScriptDebugServer.h
+++ b/WebCore/bindings/v8/ScriptDebugServer.h
@@ -70,7 +70,7 @@ public:
PauseOnExceptionsState pauseOnExceptionsState();
void setPauseOnExceptionsState(PauseOnExceptionsState pauseOnExceptionsState);
- void pause() { }
+ void pause();
void continueProgram();
void stepIntoStatement();
void stepOverStatement();
@@ -99,6 +99,14 @@ public:
void setEnabled(bool);
bool isDebuggerAlwaysEnabled();
+ class Task {
+ public:
+ virtual ~Task() { }
+ virtual void run() = 0;
+ };
+ static void interruptAndRun(PassOwnPtr<Task>);
+ void runPendingTasks();
+
private:
ScriptDebugServer();
~ScriptDebugServer() { }
diff --git a/WebCore/inspector/CodeGeneratorInspector.pm b/WebCore/inspector/CodeGeneratorInspector.pm
index 386f30b..477bdce 100644
--- a/WebCore/inspector/CodeGeneratorInspector.pm
+++ b/WebCore/inspector/CodeGeneratorInspector.pm
@@ -146,6 +146,8 @@ my %backendTypes;
my %backendMethods;
my @backendMethodsImpl;
my $backendConstructor;
+my @backendConstantDeclarations;
+my @backendConstantDefinitions;
my $backendFooter;
my $frontendClassName;
@@ -153,6 +155,8 @@ my %frontendTypes;
my %frontendMethods;
my @frontendMethodsImpl;
my $frontendConstructor;
+my @frontendConstantDeclarations;
+my @frontendConstantDefinitions;
my $frontendFooter;
my $callId = new domSignature(); # it is just structure for describing parameters from IDLStructure.pm.
@@ -208,7 +212,7 @@ sub GenerateInterface
push(@backendHead, " ${backendClassName}(InspectorController* inspectorController) : m_inspectorController(inspectorController) { }");
push(@backendHead, " void reportProtocolError(const long callId, const String& method, const String& errorText) const;");
push(@backendHead, " void dispatch(const String& message);");
- push(@backendHead, "private:");
+ push(@backendHead, " static bool getCommandName(const String& message, String* result);");
$backendConstructor = join("\n", @backendHead);
$backendFooter = " InspectorController* m_inspectorController;";
$backendTypes{"Controller"} = 1;
@@ -216,8 +220,13 @@ sub GenerateInterface
$backendTypes{"PassRefPtr"} = 1;
$backendTypes{"Array"} = 1;
- generateBackendPrivateFunctions();
+ push(@backendMethodsImpl, generateBackendPrivateFunctions());
+ push(@backendMethodsImpl, generateBackendMessageParser());
generateFunctions($interface);
+
+ # Make dispatcher methods private on the backend.
+ push(@backendConstantDeclarations, "");
+ push(@backendConstantDeclarations, "private:");
}
sub generateFunctions
@@ -277,7 +286,7 @@ static String formatWrongArgumentTypeMessage(unsigned position, const char* name
return String::format("Failed to convert parameter %d (%s) to %s", position, name, expectedType);
}
EOF
- push(@backendMethodsImpl, $privateFunctions);
+ return split("\n", $privateFunctions);
}
sub generateBackendFunction
@@ -286,6 +295,9 @@ sub generateBackendFunction
my $functionName = $function->signature->name;
+ push(@backendConstantDeclarations, " static const char* ${functionName}Cmd;");
+ push(@backendConstantDefinitions, "const char* ${backendClassName}::${functionName}Cmd = \"${functionName}\";");
+
map($backendTypes{$_->type} = 1, @{$function->parameters}); # register required types
my @inArgs = grep($_->direction eq "in", @{$function->parameters});
my @outArgs = grep($_->direction eq "out", @{$function->parameters});
@@ -297,7 +309,6 @@ sub generateBackendFunction
my @function;
push(@function, "void ${backendClassName}::${functionName}(PassRefPtr<InspectorArray> args)");
push(@function, "{");
- push(@function, " DEFINE_STATIC_LOCAL(String, backendFunctionName, (\"$functionName\"));");
push(@function, " long callId = 0;");
push(@function, "");
@@ -305,7 +316,7 @@ sub generateBackendFunction
my $expectedParametersCountWithMethodName = scalar(@inArgs) + 1;
push(@function, " if (args->length() != $expectedParametersCountWithMethodName) {");
push(@function, " ASSERT_NOT_REACHED();");
- push(@function, " reportProtocolError(callId, backendFunctionName, formatWrongArgumentsCountMessage(args->length() - 1, $expectedParametersCount));");
+ push(@function, " reportProtocolError(callId, ${functionName}Cmd, formatWrongArgumentsCountMessage(args->length() - 1, $expectedParametersCount));");
push(@function, " return;");
push(@function, " }");
push(@function, "");
@@ -317,7 +328,7 @@ sub generateBackendFunction
push(@function, " $argumentType " . $parameter->name . ";") if !($parameter->name eq "callId");
push(@function, " if (!args->get($i)->as" . $typeTransform{$type}->{"accessorSuffix"} . "(&" . $parameter->name . ")) {");
push(@function, " ASSERT_NOT_REACHED();");
- push(@function, " reportProtocolError(callId, backendFunctionName, formatWrongArgumentTypeMessage($i, \"" . $parameter->name . "\", \"$type\"));");
+ push(@function, " reportProtocolError(callId, ${functionName}Cmd, formatWrongArgumentTypeMessage($i, \"" . $parameter->name . "\", \"$type\"));");
push(@function, " return;");
push(@function, " }");
push(@function, "");
@@ -328,7 +339,7 @@ sub generateBackendFunction
my $handlerAccessor = $typeTransform{$handler}->{"handlerAccessor"};
$backendTypes{$handler} = 1;
push(@function, " if (!$handlerAccessor) {");
- push(@function, " reportProtocolError(callId, backendFunctionName, \"Error: $handler handler is not available.\");");
+ push(@function, " reportProtocolError(callId, ${functionName}Cmd, \"Error: $handler handler is not available.\");");
push(@function, " return;");
push(@function, " }");
push(@function, "");
@@ -382,7 +393,7 @@ sub generateBackendDispatcher
{
my @body;
my @methods = map($backendMethods{$_}, keys %backendMethods);
- my @mapEntries = map(" dispatchMap.add(\"$_\", &${backendClassName}::$_);", @methods);
+ my @mapEntries = map(" dispatchMap.add(${_}Cmd, &${backendClassName}::$_);", @methods);
my $mapEntries = join("\n", @mapEntries);
my $backendDispatcherBody = << "EOF";
@@ -435,16 +446,38 @@ EOF
return split("\n", $backendDispatcherBody);
}
+sub generateBackendMessageParser
+{
+ my $messageParserBody = << "EOF";
+bool ${backendClassName}::getCommandName(const String& message, String* result)
+{
+ RefPtr<InspectorValue> value = InspectorValue::parseJSON(message);
+ if (!value)
+ return false;
+ RefPtr<InspectorArray> array = value->asArray();
+ if (!array)
+ return false;
+
+ if (!array->length())
+ return false;
+ return array->get(0)->asString(result);
+}
+EOF
+ return split("\n", $messageParserBody);
+}
+
sub generateHeader
{
my $className = shift;
my $types = shift;
my $constructor = shift;
+ my $constants = shift;
my $methods = shift;
my $footer = shift;
my $forwardHeaders = join("\n", sort(map("#include <" . $typeTransform{$_}->{"forwardHeader"} . ">", grep($typeTransform{$_}->{"forwardHeader"}, keys %{$types}))));
my $forwardDeclarations = join("\n", sort(map("class " . $typeTransform{$_}->{"forward"} . ";", grep($typeTransform{$_}->{"forward"}, keys %{$types}))));
+ my $constantDeclarations = join("\n", @{$constants});
my $methodsDeclarations = join("\n", keys %{$methods});
my $headerBody = << "EOF";
@@ -464,6 +497,7 @@ class $className {
public:
$constructor
+$constantDeclarations
$methodsDeclarations
private:
@@ -481,6 +515,7 @@ sub generateSource
{
my $className = shift;
my $types = shift;
+ my $constants = shift;
my $methods = shift;
my @sourceContent = split("\r", $licenseTemplate);
@@ -498,6 +533,8 @@ sub generateSource
push(@sourceContent, "");
push(@sourceContent, "namespace $namespace {");
push(@sourceContent, "");
+ push (@sourceContent, join("\n", @{$constants}));
+ push(@sourceContent, "");
push(@sourceContent, @{$methods});
push(@sourceContent, "");
push(@sourceContent, "} // namespace $namespace");
@@ -512,22 +549,22 @@ sub finish
my $object = shift;
open(my $SOURCE, ">$outputDir/$frontendClassName.cpp") || die "Couldn't open file $outputDir/$frontendClassName.cpp";
- print $SOURCE join("\n", generateSource($frontendClassName, \%frontendTypes, \@frontendMethodsImpl));
+ print $SOURCE join("\n", generateSource($frontendClassName, \%frontendTypes, \@frontendConstantDefinitions, \@frontendMethodsImpl));
close($SOURCE);
undef($SOURCE);
open(my $HEADER, ">$outputHeadersDir/$frontendClassName.h") || die "Couldn't open file $outputHeadersDir/$frontendClassName.h";
- print $HEADER generateHeader($frontendClassName, \%frontendTypes, $frontendConstructor, \%frontendMethods, $frontendFooter);
+ print $HEADER generateHeader($frontendClassName, \%frontendTypes, $frontendConstructor, \@frontendConstantDeclarations, \%frontendMethods, $frontendFooter);
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));
+ print $SOURCE join("\n", generateSource($backendClassName, \%backendTypes, \@backendConstantDefinitions, \@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));
+ print $HEADER join("\n", generateHeader($backendClassName, \%backendTypes, $backendConstructor, \@backendConstantDeclarations, \%backendMethods, $backendFooter));
close($HEADER);
undef($HEADER);
}
diff --git a/WebKit/chromium/ChangeLog b/WebKit/chromium/ChangeLog
index 10a045a..2ad136b 100644
--- a/WebKit/chromium/ChangeLog
+++ b/WebKit/chromium/ChangeLog
@@ -1,3 +1,21 @@
+2010-08-12 Yury Semikhatsky <yurys at chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: allow interrupting long running JS to execute inspector command
+ https://bugs.webkit.org/show_bug.cgi?id=43900
+
+ * public/WebDevToolsAgent.h:
+ (WebKit::WebDevToolsAgent::MessageDescriptor::~MessageDescriptor):
+ * src/WebDevToolsAgentImpl.cpp:
+ (WebKit::WebDevToolsAgent::interruptAndDispatch):
+ (WebKit::WebDevToolsAgent::shouldInterruptForMessage):
+ (WebKit::WebDevToolsAgent::processPendingMessages):
+ * src/WebDevToolsFrontendImpl.cpp:
+ (WebKit::WebDevToolsFrontendImpl::WebDevToolsFrontendImpl):
+ * src/WebDevToolsFrontendImpl.h:
+ * src/js/DevTools.js:
+
2010-08-12 Aaron Boodman <aa at chromium.org>
Reviewed by David Hyatt.
diff --git a/WebKit/chromium/public/WebDevToolsAgent.h b/WebKit/chromium/public/WebDevToolsAgent.h
index 4fd1cbd..b74b585 100644
--- a/WebKit/chromium/public/WebDevToolsAgent.h
+++ b/WebKit/chromium/public/WebDevToolsAgent.h
@@ -73,6 +73,17 @@ public:
// Asynchronously request debugger to pause immediately.
WEBKIT_API static void debuggerPauseScript();
+ class MessageDescriptor {
+ public:
+ virtual ~MessageDescriptor() { }
+ virtual WebDevToolsAgent* agent() = 0;
+ virtual WebString message() = 0;
+ };
+ // Asynchronously request debugger to pause immediately and run the command.
+ WEBKIT_API static void interruptAndDispatch(MessageDescriptor*);
+ WEBKIT_API static bool shouldInterruptForMessage(const WebString&);
+ WEBKIT_API static void processPendingMessages();
+
typedef void (*MessageLoopDispatchHandler)();
// Installs dispatch handle that is going to be called periodically
diff --git a/WebKit/chromium/src/WebDevToolsAgentImpl.cpp b/WebKit/chromium/src/WebDevToolsAgentImpl.cpp
index 4de5624..9a139de 100644
--- a/WebKit/chromium/src/WebDevToolsAgentImpl.cpp
+++ b/WebKit/chromium/src/WebDevToolsAgentImpl.cpp
@@ -36,6 +36,7 @@
#include "InjectedScriptHost.h"
#include "InspectorBackendDispatcher.h"
#include "InspectorController.h"
+#include "InspectorValues.h"
#include "Page.h"
#include "PageGroup.h"
#include "PlatformString.h"
@@ -63,7 +64,11 @@
using WebCore::DocumentLoader;
using WebCore::FrameLoader;
using WebCore::InjectedScriptHost;
+using WebCore::InspectorArray;
+using WebCore::InspectorBackendDispatcher;
using WebCore::InspectorController;
+using WebCore::InspectorObject;
+using WebCore::InspectorValue;
using WebCore::Node;
using WebCore::Page;
using WebCore::ResourceError;
@@ -455,6 +460,43 @@ void WebDevToolsAgent::debuggerPauseScript()
DebuggerAgentManager::pauseScript();
}
+void WebDevToolsAgent::interruptAndDispatch(MessageDescriptor* d)
+{
+ class DebuggerTask : public WebCore::ScriptDebugServer::Task {
+ public:
+ DebuggerTask(WebDevToolsAgent::MessageDescriptor* descriptor) : m_descriptor(descriptor) { }
+ virtual ~DebuggerTask() { }
+ virtual void run()
+ {
+ if (WebDevToolsAgent* webagent = m_descriptor->agent())
+ webagent->dispatchOnInspectorBackend(m_descriptor->message());
+ }
+ private:
+ OwnPtr<WebDevToolsAgent::MessageDescriptor> m_descriptor;
+ };
+ WebCore::ScriptDebugServer::interruptAndRun(new DebuggerTask(d));
+}
+
+bool WebDevToolsAgent::shouldInterruptForMessage(const WebString& message)
+{
+ String commandName;
+ if (!InspectorBackendDispatcher::getCommandName(message, &commandName))
+ return false;
+ return commandName == InspectorBackendDispatcher::pauseCmd
+ || commandName == InspectorBackendDispatcher::setBreakpointCmd
+ || commandName == InspectorBackendDispatcher::removeBreakpointCmd
+ || commandName == InspectorBackendDispatcher::activateBreakpointsCmd
+ || commandName == InspectorBackendDispatcher::deactivateBreakpointsCmd
+ || commandName == InspectorBackendDispatcher::startProfilingCmd
+ || commandName == InspectorBackendDispatcher::stopProfilingCmd
+ || commandName == InspectorBackendDispatcher::getProfileCmd;
+}
+
+void WebDevToolsAgent::processPendingMessages()
+{
+ WebCore::ScriptDebugServer::shared().runPendingTasks();
+}
+
void WebDevToolsAgent::setMessageLoopDispatchHandler(MessageLoopDispatchHandler handler)
{
DebuggerAgentManager::setMessageLoopDispatchHandler(handler);
diff --git a/WebKit/chromium/src/WebDevToolsFrontendImpl.cpp b/WebKit/chromium/src/WebDevToolsFrontendImpl.cpp
index c1b09c4..40e11f7 100644
--- a/WebKit/chromium/src/WebDevToolsFrontendImpl.cpp
+++ b/WebKit/chromium/src/WebDevToolsFrontendImpl.cpp
@@ -100,17 +100,6 @@ WebDevToolsFrontendImpl::WebDevToolsFrontendImpl(
// Put each DevTools frontend Page into its own (single page) group so that it's not
// deferred along with the inspected page.
m_webViewImpl->page()->setGroupName(String());
-
- WebFrameImpl* frame = m_webViewImpl->mainFrameImpl();
- v8::HandleScope scope;
- v8::Handle<v8::Context> frameContext = V8Proxy::context(frame->frame());
-
- // Debugger commands should be sent using special method.
- BoundObject debuggerCommandExecutorObj(frameContext, this, "RemoteDebuggerCommandExecutor");
- debuggerCommandExecutorObj.addProtoFunction(
- "DebuggerPauseScript",
- WebDevToolsFrontendImpl::jsDebuggerPauseScript);
- debuggerCommandExecutorObj.build();
}
WebDevToolsFrontendImpl::~WebDevToolsFrontendImpl()
@@ -138,11 +127,4 @@ void WebDevToolsFrontendImpl::frontendLoaded()
m_client->sendFrontendLoaded();
}
-v8::Handle<v8::Value> WebDevToolsFrontendImpl::jsDebuggerPauseScript(const v8::Arguments& args)
-{
- WebDevToolsFrontendImpl* frontend = static_cast<WebDevToolsFrontendImpl*>(v8::External::Cast(*args.Data())->Value());
- frontend->m_client->sendDebuggerPauseScript();
- return v8::Undefined();
-}
-
} // namespace WebKit
diff --git a/WebKit/chromium/src/WebDevToolsFrontendImpl.h b/WebKit/chromium/src/WebDevToolsFrontendImpl.h
index e4f22fe..bde906f 100644
--- a/WebKit/chromium/src/WebDevToolsFrontendImpl.h
+++ b/WebKit/chromium/src/WebDevToolsFrontendImpl.h
@@ -70,8 +70,6 @@ public:
void frontendLoaded();
private:
- static v8::Handle<v8::Value> jsDebuggerPauseScript(const v8::Arguments& args);
-
WebKit::WebViewImpl* m_webViewImpl;
WebKit::WebDevToolsFrontendClient* m_client;
String m_applicationLocale;
diff --git a/WebKit/chromium/src/js/DevTools.js b/WebKit/chromium/src/js/DevTools.js
index 895c68b..bdaa71a 100644
--- a/WebKit/chromium/src/js/DevTools.js
+++ b/WebKit/chromium/src/js/DevTools.js
@@ -243,10 +243,3 @@ WebInspector.resetToolbarColors = function()
if (window.RemoteDebuggerAgent) {
RemoteDebuggerAgent.setContextId = function() {};
}
-
-
-// Support for pause while renderer is busy (is dispatched on IO thread).
-InspectorBackend.pause = function()
-{
- RemoteDebuggerCommandExecutor.DebuggerPauseScript();
-};
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list