summaryrefslogtreecommitdiffstats
path: root/webkit/glue/webdevtoolsagent_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'webkit/glue/webdevtoolsagent_impl.cc')
-rw-r--r--webkit/glue/webdevtoolsagent_impl.cc87
1 files changed, 69 insertions, 18 deletions
diff --git a/webkit/glue/webdevtoolsagent_impl.cc b/webkit/glue/webdevtoolsagent_impl.cc
index ea84c14..3e0b768 100644
--- a/webkit/glue/webdevtoolsagent_impl.cc
+++ b/webkit/glue/webdevtoolsagent_impl.cc
@@ -27,6 +27,7 @@
#include "webkit/api/public/WebDataSource.h"
#include "webkit/api/public/WebDevToolsAgentClient.h"
#include "webkit/api/public/WebFrame.h"
+#include "webkit/api/public/WebString.h"
#include "webkit/api/public/WebURL.h"
#include "webkit/api/public/WebURLRequest.h"
#include "webkit/api/src/WebViewImpl.h"
@@ -82,6 +83,13 @@ void SetApuAgentEnabledInUtilityContext(v8::Handle<v8::Context> context,
dispatcher->Set(v8::String::New("enabled"), v8::Boolean::New(enabled));
}
+// TODO(pfeldman): Make this public in WebDevToolsAgent API.
+static const char kApuAgentFeatureName[] = "apu-agent";
+
+// Keep these in sync with the ones in inject_dispatch.js.
+static const char kTimelineFeatureName[] = "timeline-profiler";
+static const char kResourceTrackingFeatureName[] = "resource-tracking";
+
} // namespace
WebDevToolsAgentImpl::WebDevToolsAgentImpl(
@@ -271,24 +279,23 @@ void WebDevToolsAgentImpl::inspectElementAt(const WebPoint& point) {
web_view_impl_->inspectElementAt(point);
}
-void WebDevToolsAgentImpl::setApuAgentEnabled(bool enable) {
- apu_agent_enabled_ = enable;
- SetApuAgentEnabledInUtilityContext(utility_context_, enable);
- InspectorController* ic = web_view_impl_->page()->inspectorController();
- if (enable) {
- resource_tracking_was_enabled_ = ic->resourceTrackingEnabled();
- ic->startTimelineProfiler();
- if (!resource_tracking_was_enabled_) {
- // TODO(knorton): Introduce some kind of agents dependency here so that
- // user could turn off resource tracking while apu agent is on.
- ic->enableResourceTracking(false, false);
- }
- } else {
- ic->stopTimelineProfiler();
- if (!resource_tracking_was_enabled_) {
- ic->disableResourceTracking(false);
- }
- resource_tracking_was_enabled_ = false;
+void WebDevToolsAgentImpl::setRuntimeFeatureEnabled(const WebString& wfeature,
+ bool enabled) {
+ String feature = webkit_glue::WebStringToString(wfeature);
+ if (feature == kApuAgentFeatureName) {
+ setApuAgentEnabled(enabled);
+ } else if (feature == kTimelineFeatureName) {
+ InspectorController* ic = web_view_impl_->page()->inspectorController();
+ if (enabled)
+ ic->startTimelineProfiler();
+ else
+ ic->stopTimelineProfiler();
+ } else if (feature == kResourceTrackingFeatureName) {
+ InspectorController* ic = web_view_impl_->page()->inspectorController();
+ if (enabled)
+ ic->enableResourceTracking(false /* not sticky */, false /* no reload */);
+ else
+ ic->disableResourceTracking(false /* not sticky */);
}
}
@@ -315,6 +322,9 @@ void WebDevToolsAgentImpl::InitDevToolsAgentHost() {
devtools_agent_host_->AddProtoFunction(
"dispatchToApu",
WebDevToolsAgentImpl::JsDispatchToApu);
+ devtools_agent_host_->AddProtoFunction(
+ "runtimeFeatureStateChanged",
+ WebDevToolsAgentImpl::JsOnRuntimeFeatureStateChanged);
devtools_agent_host_->Build();
v8::HandleScope scope;
@@ -379,6 +389,30 @@ void WebDevToolsAgentImpl::ResetInspectorFrontendProxy() {
ScriptObject(state, injected_script));
}
+void WebDevToolsAgentImpl::setApuAgentEnabled(bool enabled) {
+ apu_agent_enabled_ = enabled;
+ SetApuAgentEnabledInUtilityContext(utility_context_, enabled);
+ InspectorController* ic = web_view_impl_->page()->inspectorController();
+ if (enabled) {
+ resource_tracking_was_enabled_ = ic->resourceTrackingEnabled();
+ ic->startTimelineProfiler();
+ if (!resource_tracking_was_enabled_) {
+ // TODO(knorton): Introduce some kind of agents dependency here so that
+ // user could turn off resource tracking while apu agent is on.
+ ic->enableResourceTracking(false, false);
+ }
+ } else {
+ ic->stopTimelineProfiler();
+ if (!resource_tracking_was_enabled_) {
+ ic->disableResourceTracking(false);
+ }
+ resource_tracking_was_enabled_ = false;
+ }
+ client_->runtimeFeatureStateChanged(
+ webkit_glue::StringToWebString(kApuAgentFeatureName),
+ enabled);
+}
+
// static
v8::Handle<v8::Value> WebDevToolsAgentImpl::JsDispatchOnClient(
const v8::Arguments& args) {
@@ -407,6 +441,23 @@ v8::Handle<v8::Value> WebDevToolsAgentImpl::JsDispatchToApu(
return v8::Undefined();
}
+// static
+v8::Handle<v8::Value> WebDevToolsAgentImpl::JsOnRuntimeFeatureStateChanged(
+ const v8::Arguments& args) {
+ v8::TryCatch exception_catcher;
+ String feature = WebCore::toWebCoreStringWithNullCheck(args[0]);
+ bool enabled = args[1]->ToBoolean()->Value();
+ if (feature.isEmpty() || exception_catcher.HasCaught()) {
+ return v8::Undefined();
+ }
+ WebDevToolsAgentImpl* agent = static_cast<WebDevToolsAgentImpl*>(
+ v8::External::Cast(*args.Data())->Value());
+ agent->client_->runtimeFeatureStateChanged(
+ webkit_glue::StringToWebString(feature),
+ enabled);
+ return v8::Undefined();
+}
+
namespace WebKit {
// static