| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "config.h" | 5 #include "config.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "Document.h" | 9 #include "Document.h" |
| 10 #include "DOMWindow.h" | 10 #include "DOMWindow.h" |
| (...skipping 23 matching lines...) Expand all Loading... |
| 34 #include "webkit/glue/glue_util.h" | 34 #include "webkit/glue/glue_util.h" |
| 35 #include "webkit/glue/webdevtoolsclient_delegate.h" | 35 #include "webkit/glue/webdevtoolsclient_delegate.h" |
| 36 #include "webkit/glue/webdevtoolsclient_impl.h" | 36 #include "webkit/glue/webdevtoolsclient_impl.h" |
| 37 #include "webkit/glue/webview_impl.h" | 37 #include "webkit/glue/webview_impl.h" |
| 38 | 38 |
| 39 using namespace WebCore; | 39 using namespace WebCore; |
| 40 using WebKit::WebFrame; | 40 using WebKit::WebFrame; |
| 41 using WebKit::WebScriptSource; | 41 using WebKit::WebScriptSource; |
| 42 using WebKit::WebString; | 42 using WebKit::WebString; |
| 43 | 43 |
| 44 static v8::Local<v8::String> ToV8String(const String& s) { |
| 45 if (s.isNull()) |
| 46 return v8::Local<v8::String>(); |
| 47 |
| 48 return v8::String::New(reinterpret_cast<const uint16_t*>(s.characters()), |
| 49 s.length()); |
| 50 } |
| 51 |
| 44 DEFINE_RPC_JS_BOUND_OBJ(DebuggerAgent, DEBUGGER_AGENT_STRUCT, | 52 DEFINE_RPC_JS_BOUND_OBJ(DebuggerAgent, DEBUGGER_AGENT_STRUCT, |
| 45 DebuggerAgentDelegate, DEBUGGER_AGENT_DELEGATE_STRUCT) | 53 DebuggerAgentDelegate, DEBUGGER_AGENT_DELEGATE_STRUCT) |
| 46 DEFINE_RPC_JS_BOUND_OBJ(ToolsAgent, TOOLS_AGENT_STRUCT, | 54 DEFINE_RPC_JS_BOUND_OBJ(ToolsAgent, TOOLS_AGENT_STRUCT, |
| 47 ToolsAgentDelegate, TOOLS_AGENT_DELEGATE_STRUCT) | 55 ToolsAgentDelegate, TOOLS_AGENT_DELEGATE_STRUCT) |
| 48 | 56 |
| 49 class ToolsAgentNativeDelegateImpl : public ToolsAgentNativeDelegate { | 57 class ToolsAgentNativeDelegateImpl : public ToolsAgentNativeDelegate { |
| 50 public: | 58 public: |
| 51 struct ResourceContentRequestData { | 59 struct ResourceContentRequestData { |
| 52 String mime_type; | 60 String mime_type; |
| 53 RefPtr<Node> frame; | 61 RefPtr<Node> frame; |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 93 private: | 101 private: |
| 94 WebFrameImpl* frame_; | 102 WebFrameImpl* frame_; |
| 95 HashMap<int, ResourceContentRequestData> resource_content_requests_; | 103 HashMap<int, ResourceContentRequestData> resource_content_requests_; |
| 96 DISALLOW_COPY_AND_ASSIGN(ToolsAgentNativeDelegateImpl); | 104 DISALLOW_COPY_AND_ASSIGN(ToolsAgentNativeDelegateImpl); |
| 97 }; | 105 }; |
| 98 | 106 |
| 99 // static | 107 // static |
| 100 WebDevToolsClient* WebDevToolsClient::Create( | 108 WebDevToolsClient* WebDevToolsClient::Create( |
| 101 WebView* view, | 109 WebView* view, |
| 102 WebDevToolsClientDelegate* delegate, | 110 WebDevToolsClientDelegate* delegate, |
| 103 const std::string& application_locale) { | 111 const WebString& application_locale) { |
| 104 return new WebDevToolsClientImpl(static_cast<WebViewImpl*>(view), | 112 return new WebDevToolsClientImpl( |
| 105 delegate, | 113 static_cast<WebViewImpl*>(view), |
| 106 application_locale); | 114 delegate, |
| 115 webkit_glue::WebStringToString(application_locale)); |
| 107 } | 116 } |
| 108 | 117 |
| 109 WebDevToolsClientImpl::WebDevToolsClientImpl( | 118 WebDevToolsClientImpl::WebDevToolsClientImpl( |
| 110 WebViewImpl* web_view_impl, | 119 WebViewImpl* web_view_impl, |
| 111 WebDevToolsClientDelegate* delegate, | 120 WebDevToolsClientDelegate* delegate, |
| 112 const std::string& application_locale) | 121 const String& application_locale) |
| 113 : web_view_impl_(web_view_impl), | 122 : web_view_impl_(web_view_impl), |
| 114 delegate_(delegate), | 123 delegate_(delegate), |
| 115 application_locale_(application_locale.c_str()), | 124 application_locale_(application_locale), |
| 116 loaded_(false) { | 125 loaded_(false) { |
| 117 WebFrameImpl* frame = web_view_impl_->main_frame(); | 126 WebFrameImpl* frame = web_view_impl_->main_frame(); |
| 118 v8::HandleScope scope; | 127 v8::HandleScope scope; |
| 119 v8::Handle<v8::Context> frame_context = V8Proxy::context(frame->frame()); | 128 v8::Handle<v8::Context> frame_context = V8Proxy::context(frame->frame()); |
| 120 | 129 |
| 121 debugger_agent_obj_.set(new JsDebuggerAgentBoundObj( | 130 debugger_agent_obj_.set(new JsDebuggerAgentBoundObj( |
| 122 this, frame_context, "RemoteDebuggerAgent")); | 131 this, frame_context, "RemoteDebuggerAgent")); |
| 123 tools_agent_obj_.set( | 132 tools_agent_obj_.set( |
| 124 new JsToolsAgentBoundObj(this, frame_context, "RemoteToolsAgent")); | 133 new JsToolsAgentBoundObj(this, frame_context, "RemoteToolsAgent")); |
| 125 | 134 |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 171 dev_tools_host_->AddProtoFunction( | 180 dev_tools_host_->AddProtoFunction( |
| 172 "hiddenPanels", | 181 "hiddenPanels", |
| 173 WebDevToolsClientImpl::JsHiddenPanels); | 182 WebDevToolsClientImpl::JsHiddenPanels); |
| 174 dev_tools_host_->Build(); | 183 dev_tools_host_->Build(); |
| 175 } | 184 } |
| 176 | 185 |
| 177 WebDevToolsClientImpl::~WebDevToolsClientImpl() { | 186 WebDevToolsClientImpl::~WebDevToolsClientImpl() { |
| 178 } | 187 } |
| 179 | 188 |
| 180 void WebDevToolsClientImpl::DispatchMessageFromAgent( | 189 void WebDevToolsClientImpl::DispatchMessageFromAgent( |
| 181 const std::string& class_name, | 190 const WebString& class_name, |
| 182 const std::string& method_name, | 191 const WebString& method_name, |
| 183 const std::string& param1, | 192 const WebString& param1, |
| 184 const std::string& param2, | 193 const WebString& param2, |
| 185 const std::string& param3) { | 194 const WebString& param3) { |
| 186 if (ToolsAgentNativeDelegateDispatch::Dispatch( | 195 if (ToolsAgentNativeDelegateDispatch::Dispatch( |
| 187 tools_agent_native_delegate_impl_.get(), | 196 tools_agent_native_delegate_impl_.get(), |
| 188 class_name, | 197 webkit_glue::WebStringToString(class_name), |
| 189 method_name, | 198 webkit_glue::WebStringToString(method_name), |
| 190 param1, | 199 webkit_glue::WebStringToString(param1), |
| 191 param2, | 200 webkit_glue::WebStringToString(param2), |
| 192 param3)) { | 201 webkit_glue::WebStringToString(param3))) { |
| 193 return; | 202 return; |
| 194 } | 203 } |
| 195 | 204 |
| 196 Vector<std::string> v; | 205 Vector<String> v; |
| 197 v.append(class_name); | 206 v.append(webkit_glue::WebStringToString(class_name)); |
| 198 v.append(method_name); | 207 v.append(webkit_glue::WebStringToString(method_name)); |
| 199 v.append(param1); | 208 v.append(webkit_glue::WebStringToString(param1)); |
| 200 v.append(param2); | 209 v.append(webkit_glue::WebStringToString(param2)); |
| 201 v.append(param3); | 210 v.append(webkit_glue::WebStringToString(param3)); |
| 202 if (!loaded_) { | 211 if (!loaded_) { |
| 203 pending_incoming_messages_.append(v); | 212 pending_incoming_messages_.append(v); |
| 204 return; | 213 return; |
| 205 } | 214 } |
| 206 ExecuteScript(v); | 215 ExecuteScript(v); |
| 207 } | 216 } |
| 208 | 217 |
| 209 void WebDevToolsClientImpl::AddResourceSourceToFrame(int resource_id, | 218 void WebDevToolsClientImpl::AddResourceSourceToFrame(int resource_id, |
| 210 String mime_type, | 219 String mime_type, |
| 211 Node* frame) { | 220 Node* frame) { |
| 212 if (tools_agent_native_delegate_impl_->WaitingForResponse(resource_id, | 221 if (tools_agent_native_delegate_impl_->WaitingForResponse(resource_id, |
| 213 frame)) { | 222 frame)) { |
| 214 return; | 223 return; |
| 215 } | 224 } |
| 216 tools_agent_obj_->GetResourceContent(resource_id, resource_id); | 225 tools_agent_obj_->GetResourceContent(resource_id, resource_id); |
| 217 tools_agent_native_delegate_impl_->RequestSent(resource_id, mime_type, frame); | 226 tools_agent_native_delegate_impl_->RequestSent(resource_id, mime_type, frame); |
| 218 } | 227 } |
| 219 | 228 |
| 220 void WebDevToolsClientImpl::ExecuteScript(const Vector<std::string>& v) { | 229 void WebDevToolsClientImpl::ExecuteScript(const Vector<String>& v) { |
| 221 WebFrameImpl* frame = web_view_impl_->main_frame(); | 230 WebFrameImpl* frame = web_view_impl_->main_frame(); |
| 222 v8::HandleScope scope; | 231 v8::HandleScope scope; |
| 223 v8::Handle<v8::Context> frame_context = V8Proxy::context(frame->frame()); | 232 v8::Handle<v8::Context> frame_context = V8Proxy::context(frame->frame()); |
| 224 v8::Context::Scope context_scope(frame_context); | 233 v8::Context::Scope context_scope(frame_context); |
| 225 v8::Handle<v8::Value> dispatch_function = | 234 v8::Handle<v8::Value> dispatch_function = |
| 226 frame_context->Global()->Get(v8::String::New("devtools$$dispatch")); | 235 frame_context->Global()->Get(v8::String::New("devtools$$dispatch")); |
| 227 ASSERT(dispatch_function->IsFunction()); | 236 ASSERT(dispatch_function->IsFunction()); |
| 228 v8::Handle<v8::Function> function = v8::Handle<v8::Function>::Cast(dispatch_fu
nction); | 237 v8::Handle<v8::Function> function = v8::Handle<v8::Function>::Cast(dispatch_fu
nction); |
| 229 v8::Handle<v8::Value> args[] = { | 238 v8::Handle<v8::Value> args[] = { |
| 230 v8::String::New(v.at(0).c_str()), | 239 ToV8String(v.at(0)), |
| 231 v8::String::New(v.at(1).c_str()), | 240 ToV8String(v.at(1)), |
| 232 v8::String::New(v.at(2).c_str()), | 241 ToV8String(v.at(2)), |
| 233 v8::String::New(v.at(3).c_str()), | 242 ToV8String(v.at(3)), |
| 234 v8::String::New(v.at(4).c_str()) | 243 ToV8String(v.at(4)), |
| 235 }; | 244 }; |
| 236 function->Call(frame_context->Global(), 5, args); | 245 function->Call(frame_context->Global(), 5, args); |
| 237 } | 246 } |
| 238 | 247 |
| 239 void WebDevToolsClientImpl::SendRpcMessage(const std::string& class_name, | 248 void WebDevToolsClientImpl::SendRpcMessage(const String& class_name, |
| 240 const std::string& method_name, | 249 const String& method_name, |
| 241 const std::string& param1, | 250 const String& param1, |
| 242 const std::string& param2, | 251 const String& param2, |
| 243 const std::string& param3) { | 252 const String& param3) { |
| 244 delegate_->SendMessageToAgent(class_name, method_name, param1, param2, | 253 delegate_->SendMessageToAgent( |
| 245 param3); | 254 webkit_glue::StringToWebString(class_name), |
| 255 webkit_glue::StringToWebString(method_name), |
| 256 webkit_glue::StringToWebString(param1), |
| 257 webkit_glue::StringToWebString(param2), |
| 258 webkit_glue::StringToWebString(param3)); |
| 246 } | 259 } |
| 247 | 260 |
| 248 // static | 261 // static |
| 249 v8::Handle<v8::Value> WebDevToolsClientImpl::JsReset( | 262 v8::Handle<v8::Value> WebDevToolsClientImpl::JsReset( |
| 250 const v8::Arguments& args) { | 263 const v8::Arguments& args) { |
| 251 WebDevToolsClientImpl* client = static_cast<WebDevToolsClientImpl*>( | 264 WebDevToolsClientImpl* client = static_cast<WebDevToolsClientImpl*>( |
| 252 v8::External::Cast(*args.Data())->Value()); | 265 v8::External::Cast(*args.Data())->Value()); |
| 253 WebFrameImpl* frame = client->web_view_impl_->main_frame(); | 266 WebFrameImpl* frame = client->web_view_impl_->main_frame(); |
| 254 client->tools_agent_native_delegate_impl_.set( | 267 client->tools_agent_native_delegate_impl_.set( |
| 255 new ToolsAgentNativeDelegateImpl(frame)); | 268 new ToolsAgentNativeDelegateImpl(frame)); |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 306 const v8::Arguments& args) { | 319 const v8::Arguments& args) { |
| 307 WebDevToolsClientImpl* client = static_cast<WebDevToolsClientImpl*>( | 320 WebDevToolsClientImpl* client = static_cast<WebDevToolsClientImpl*>( |
| 308 v8::External::Cast(*args.Data())->Value()); | 321 v8::External::Cast(*args.Data())->Value()); |
| 309 client->loaded_ = true; | 322 client->loaded_ = true; |
| 310 | 323 |
| 311 // Grant the devtools page the ability to have source view iframes. | 324 // Grant the devtools page the ability to have source view iframes. |
| 312 Page* page = V8Proxy::retrieveFrameForEnteredContext()->page(); | 325 Page* page = V8Proxy::retrieveFrameForEnteredContext()->page(); |
| 313 SecurityOrigin* origin = page->mainFrame()->domWindow()->securityOrigin(); | 326 SecurityOrigin* origin = page->mainFrame()->domWindow()->securityOrigin(); |
| 314 origin->grantUniversalAccess(); | 327 origin->grantUniversalAccess(); |
| 315 | 328 |
| 316 for (Vector<Vector<std::string> >::iterator it = | 329 for (Vector<Vector<String> >::iterator it = |
| 317 client->pending_incoming_messages_.begin(); | 330 client->pending_incoming_messages_.begin(); |
| 318 it != client->pending_incoming_messages_.end(); | 331 it != client->pending_incoming_messages_.end(); |
| 319 ++it) { | 332 ++it) { |
| 320 client->ExecuteScript(*it); | 333 client->ExecuteScript(*it); |
| 321 } | 334 } |
| 322 client->pending_incoming_messages_.clear(); | 335 client->pending_incoming_messages_.clear(); |
| 323 return v8::Undefined(); | 336 return v8::Undefined(); |
| 324 } | 337 } |
| 325 | 338 |
| 326 // static | 339 // static |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 395 Page* page = V8Proxy::retrieveFrameForEnteredContext()->page(); | 408 Page* page = V8Proxy::retrieveFrameForEnteredContext()->page(); |
| 396 return v8String(page->settings()->databasesEnabled() ? "" : "databases"); | 409 return v8String(page->settings()->databasesEnabled() ? "" : "databases"); |
| 397 } | 410 } |
| 398 | 411 |
| 399 // static | 412 // static |
| 400 v8::Handle<v8::Value> WebDevToolsClientImpl::JsDebuggerCommand( | 413 v8::Handle<v8::Value> WebDevToolsClientImpl::JsDebuggerCommand( |
| 401 const v8::Arguments& args) { | 414 const v8::Arguments& args) { |
| 402 WebDevToolsClientImpl* client = static_cast<WebDevToolsClientImpl*>( | 415 WebDevToolsClientImpl* client = static_cast<WebDevToolsClientImpl*>( |
| 403 v8::External::Cast(*args.Data())->Value()); | 416 v8::External::Cast(*args.Data())->Value()); |
| 404 String command = WebCore::toWebCoreStringWithNullCheck(args[0]); | 417 String command = WebCore::toWebCoreStringWithNullCheck(args[0]); |
| 405 std::string std_command = webkit_glue::StringToStdString(command); | 418 WebString std_command = webkit_glue::StringToWebString(command); |
| 406 client->delegate_->SendDebuggerCommandToAgent(std_command); | 419 client->delegate_->SendDebuggerCommandToAgent(std_command); |
| 407 return v8::Undefined(); | 420 return v8::Undefined(); |
| 408 } | 421 } |
| OLD | NEW |