| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 // Implements the Chrome Extensions Debugger API. | 5 // Implements the Chrome Extensions Debugger API. |
| 6 | 6 |
| 7 #include "chrome/browser/extensions/api/debugger/debugger_api.h" | 7 #include "chrome/browser/extensions/api/debugger/debugger_api.h" |
| 8 | 8 |
| 9 #include <map> | 9 #include <map> |
| 10 #include <set> | 10 #include <set> |
| 11 | 11 |
| 12 #include "base/json/json_reader.h" | 12 #include "base/json/json_reader.h" |
| 13 #include "base/json/json_writer.h" | 13 #include "base/json/json_writer.h" |
| 14 #include "base/memory/scoped_ptr.h" | 14 #include "base/memory/scoped_ptr.h" |
| 15 #include "base/memory/singleton.h" | 15 #include "base/memory/singleton.h" |
| 16 #include "base/string_number_conversions.h" | 16 #include "base/string_number_conversions.h" |
| 17 #include "base/utf_string_conversions.h" | 17 #include "base/utf_string_conversions.h" |
| 18 #include "base/values.h" | 18 #include "base/values.h" |
| 19 #include "chrome/browser/api/infobars/confirm_infobar_delegate.h" | 19 #include "chrome/browser/api/infobars/confirm_infobar_delegate.h" |
| 20 #include "chrome/browser/extensions/api/debugger/debugger_api_constants.h" | 20 #include "chrome/browser/extensions/api/debugger/debugger_api_constants.h" |
| 21 #include "chrome/browser/extensions/event_router.h" | 21 #include "chrome/browser/extensions/event_router.h" |
| 22 #include "chrome/browser/extensions/extension_system.h" |
| 22 #include "chrome/browser/extensions/extension_tab_util.h" | 23 #include "chrome/browser/extensions/extension_tab_util.h" |
| 23 #include "chrome/browser/infobars/infobar.h" | 24 #include "chrome/browser/infobars/infobar.h" |
| 24 #include "chrome/browser/infobars/infobar_tab_helper.h" | 25 #include "chrome/browser/infobars/infobar_tab_helper.h" |
| 25 #include "chrome/browser/profiles/profile.h" | 26 #include "chrome/browser/profiles/profile.h" |
| 26 #include "chrome/browser/ui/tab_contents/tab_contents.h" | 27 #include "chrome/browser/ui/tab_contents/tab_contents.h" |
| 27 #include "chrome/browser/ui/webui/chrome_web_ui_controller_factory.h" | 28 #include "chrome/browser/ui/webui/chrome_web_ui_controller_factory.h" |
| 28 #include "chrome/common/chrome_notification_types.h" | 29 #include "chrome/common/chrome_notification_types.h" |
| 29 #include "chrome/common/extensions/api/debugger.h" | 30 #include "chrome/common/extensions/api/debugger.h" |
| 30 #include "chrome/common/extensions/extension.h" | 31 #include "chrome/common/extensions/extension.h" |
| 31 #include "chrome/common/extensions/extension_error_utils.h" | 32 #include "chrome/common/extensions/extension_error_utils.h" |
| (...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 279 detach_reason_ = OnDetach::REASON_REPLACED_WITH_DEVTOOLS; | 280 detach_reason_ = OnDetach::REASON_REPLACED_WITH_DEVTOOLS; |
| 280 } | 281 } |
| 281 | 282 |
| 282 void ExtensionDevToolsClientHost::MarkAsDismissed() { | 283 void ExtensionDevToolsClientHost::MarkAsDismissed() { |
| 283 detach_reason_ = OnDetach::REASON_CANCELED_BY_USER; | 284 detach_reason_ = OnDetach::REASON_CANCELED_BY_USER; |
| 284 } | 285 } |
| 285 | 286 |
| 286 void ExtensionDevToolsClientHost::SendDetachedEvent() { | 287 void ExtensionDevToolsClientHost::SendDetachedEvent() { |
| 287 Profile* profile = | 288 Profile* profile = |
| 288 Profile::FromBrowserContext(web_contents_->GetBrowserContext()); | 289 Profile::FromBrowserContext(web_contents_->GetBrowserContext()); |
| 289 if (profile != NULL && profile->GetExtensionEventRouter()) { | 290 if (profile != NULL && |
| 291 extensions::ExtensionSystem::Get(profile)->event_router()) { |
| 290 Debuggee debuggee; | 292 Debuggee debuggee; |
| 291 debuggee.tab_id = tab_id_; | 293 debuggee.tab_id = tab_id_; |
| 292 scoped_ptr<base::ListValue> args(OnDetach::Create(debuggee, | 294 scoped_ptr<base::ListValue> args(OnDetach::Create(debuggee, |
| 293 detach_reason_)); | 295 detach_reason_)); |
| 294 profile->GetExtensionEventRouter()->DispatchEventToExtension( | 296 extensions::ExtensionSystem::Get(profile)->event_router()-> |
| 295 extension_id_, keys::kOnDetach, args.Pass(), profile, GURL()); | 297 DispatchEventToExtension(extension_id_, keys::kOnDetach, args.Pass(), |
| 298 profile, GURL()); |
| 296 } | 299 } |
| 297 } | 300 } |
| 298 | 301 |
| 299 void ExtensionDevToolsClientHost::Observe( | 302 void ExtensionDevToolsClientHost::Observe( |
| 300 int type, | 303 int type, |
| 301 const content::NotificationSource& source, | 304 const content::NotificationSource& source, |
| 302 const content::NotificationDetails& details) { | 305 const content::NotificationDetails& details) { |
| 303 if (type == chrome::NOTIFICATION_EXTENSION_UNLOADED) { | 306 if (type == chrome::NOTIFICATION_EXTENSION_UNLOADED) { |
| 304 std::string id = | 307 std::string id = |
| 305 content::Details<extensions::UnloadedExtensionInfo>(details)-> | 308 content::Details<extensions::UnloadedExtensionInfo>(details)-> |
| 306 extension->id(); | 309 extension->id(); |
| 307 if (id == extension_id_) | 310 if (id == extension_id_) |
| 308 Close(); | 311 Close(); |
| 309 } else { | 312 } else { |
| 310 DCHECK_EQ(chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED, type); | 313 DCHECK_EQ(chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED, type); |
| 311 if (content::Details<InfoBarRemovedDetails>(details)->first == | 314 if (content::Details<InfoBarRemovedDetails>(details)->first == |
| 312 infobar_delegate_) { | 315 infobar_delegate_) { |
| 313 infobar_delegate_ = NULL; | 316 infobar_delegate_ = NULL; |
| 314 SendDetachedEvent(); | 317 SendDetachedEvent(); |
| 315 Close(); | 318 Close(); |
| 316 } | 319 } |
| 317 } | 320 } |
| 318 } | 321 } |
| 319 | 322 |
| 320 void ExtensionDevToolsClientHost::DispatchOnInspectorFrontend( | 323 void ExtensionDevToolsClientHost::DispatchOnInspectorFrontend( |
| 321 const std::string& message) { | 324 const std::string& message) { |
| 322 Profile* profile = | 325 Profile* profile = |
| 323 Profile::FromBrowserContext(web_contents_->GetBrowserContext()); | 326 Profile::FromBrowserContext(web_contents_->GetBrowserContext()); |
| 324 if (profile == NULL || !profile->GetExtensionEventRouter()) | 327 if (profile == NULL || |
| 328 !extensions::ExtensionSystem::Get(profile)->event_router()) |
| 325 return; | 329 return; |
| 326 | 330 |
| 327 scoped_ptr<Value> result(base::JSONReader::Read(message)); | 331 scoped_ptr<Value> result(base::JSONReader::Read(message)); |
| 328 if (!result->IsType(Value::TYPE_DICTIONARY)) | 332 if (!result->IsType(Value::TYPE_DICTIONARY)) |
| 329 return; | 333 return; |
| 330 DictionaryValue* dictionary = static_cast<DictionaryValue*>(result.get()); | 334 DictionaryValue* dictionary = static_cast<DictionaryValue*>(result.get()); |
| 331 | 335 |
| 332 int id; | 336 int id; |
| 333 if (!dictionary->GetInteger("id", &id)) { | 337 if (!dictionary->GetInteger("id", &id)) { |
| 334 std::string method_name; | 338 std::string method_name; |
| 335 if (!dictionary->GetString("method", &method_name)) | 339 if (!dictionary->GetString("method", &method_name)) |
| 336 return; | 340 return; |
| 337 | 341 |
| 338 Debuggee debuggee; | 342 Debuggee debuggee; |
| 339 debuggee.tab_id = tab_id_; | 343 debuggee.tab_id = tab_id_; |
| 340 | 344 |
| 341 OnEvent::Params params; | 345 OnEvent::Params params; |
| 342 DictionaryValue* params_value; | 346 DictionaryValue* params_value; |
| 343 if (dictionary->GetDictionary("params", ¶ms_value)) | 347 if (dictionary->GetDictionary("params", ¶ms_value)) |
| 344 params.additional_properties.Swap(params_value); | 348 params.additional_properties.Swap(params_value); |
| 345 | 349 |
| 346 scoped_ptr<ListValue> args(OnEvent::Create(debuggee, method_name, params)); | 350 scoped_ptr<ListValue> args(OnEvent::Create(debuggee, method_name, params)); |
| 347 profile->GetExtensionEventRouter()->DispatchEventToExtension( | 351 extensions::ExtensionSystem::Get(profile)->event_router()-> |
| 348 extension_id_, keys::kOnEvent, args.Pass(), profile, GURL()); | 352 DispatchEventToExtension(extension_id_, keys::kOnEvent, args.Pass(), |
| 353 profile, GURL()); |
| 349 } else { | 354 } else { |
| 350 SendCommandDebuggerFunction* function = pending_requests_[id]; | 355 SendCommandDebuggerFunction* function = pending_requests_[id]; |
| 351 if (!function) | 356 if (!function) |
| 352 return; | 357 return; |
| 353 | 358 |
| 354 function->SendResponseBody(dictionary); | 359 function->SendResponseBody(dictionary); |
| 355 pending_requests_.erase(id); | 360 pending_requests_.erase(id); |
| 356 } | 361 } |
| 357 } | 362 } |
| 358 | 363 |
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 543 } | 548 } |
| 544 | 549 |
| 545 // static | 550 // static |
| 546 void DebuggerApi::MarkDevToolsClientHostAsReplaced( | 551 void DebuggerApi::MarkDevToolsClientHostAsReplaced( |
| 547 DevToolsClientHost* client_host) { | 552 DevToolsClientHost* client_host) { |
| 548 ExtensionDevToolsClientHost* host = AttachedClientHosts::GetInstance()-> | 553 ExtensionDevToolsClientHost* host = AttachedClientHosts::GetInstance()-> |
| 549 AsExtensionDevToolsClientHost(client_host); | 554 AsExtensionDevToolsClientHost(client_host); |
| 550 if (host) | 555 if (host) |
| 551 host->MarkAsReplaced(); | 556 host->MarkAsReplaced(); |
| 552 } | 557 } |
| OLD | NEW |