Index: webkit/glue/webdevtoolsagent_impl.cc |
=================================================================== |
--- webkit/glue/webdevtoolsagent_impl.cc (revision 30693) |
+++ webkit/glue/webdevtoolsagent_impl.cc (working copy) |
@@ -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 @@ |
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 @@ |
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 @@ |
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 @@ |
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 @@ |
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 |