Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(160)

Side by Side Diff: chrome/browser/extensions/extension_devtools_bridge.cc

Issue 159882: Implements extensions devtools API (Closed)
Patch Set: Fixes flakiness in tests by grabbing tab ID in C++ land and passing it down Created 11 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "chrome/browser/extensions/extension_devtools_bridge.h"
6
7 #include "base/message_loop.h"
8 #include "base/string_util.h"
9 #include "chrome/browser/debugger/devtools_manager.h"
10 #include "chrome/browser/extensions/extension_devtools_events.h"
11 #include "chrome/browser/extensions/extension_devtools_manager.h"
12 #include "chrome/browser/extensions/extension_tabs_module.h"
13 #include "chrome/browser/profile.h"
14 #include "chrome/browser/tab_contents/tab_contents.h"
15 #include "chrome/common/devtools_messages.h"
16
17 ExtensionDevToolsBridge::ExtensionDevToolsBridge(int tab_id,
18 Profile* profile)
19 : tab_id_(tab_id),
20 inspected_rvh_(NULL),
21 profile_(profile),
22 on_page_event_name_(
23 ExtensionDevToolsEvents::OnPageEventNameForTab(tab_id)),
24 on_tab_url_change_event_name_(
25 ExtensionDevToolsEvents::OnTabUrlChangeEventNameForTab(tab_id)),
26 on_tab_close_event_name_(
27 ExtensionDevToolsEvents::OnTabCloseEventNameForTab(tab_id)) {
28 extension_devtools_manager_ = profile_->GetExtensionDevToolsManager();
29 DCHECK(extension_devtools_manager_.get());
30 }
31
32 ExtensionDevToolsBridge::~ExtensionDevToolsBridge() {
33 }
34
35 bool ExtensionDevToolsBridge::RegisterAsDevToolsClientHost() {
36 DCHECK_EQ(MessageLoop::current()->type(), MessageLoop::TYPE_UI);
37
38 Browser* browser;
39 TabStripModel* tab_strip;
40 TabContents* contents;
41 int tab_index;
42 if (ExtensionTabUtil::GetTabById(tab_id_, profile_, &browser, &tab_strip,
43 &contents, &tab_index)) {
44 inspected_rvh_ = contents->render_view_host();
45 DevToolsManager::GetInstance()->RegisterDevToolsClientHostFor(
46 inspected_rvh_, this);
47 return true;
48 }
49 return false;
50 }
51
52 void ExtensionDevToolsBridge::UnregisterAsDevToolsClientHost() {
53 DCHECK_EQ(MessageLoop::current()->type(), MessageLoop::TYPE_UI);
54
55 if (inspected_rvh_) {
56 DevToolsManager::GetInstance()->UnregisterDevToolsClientHostFor(
57 inspected_rvh_);
58 inspected_rvh_ = NULL;
59 }
60 }
61
62 // If the tab we are looking at is going away then we fire a closing event at
63 // the extension.
64 void ExtensionDevToolsBridge::InspectedTabClosing() {
65 DCHECK_EQ(MessageLoop::current()->type(), MessageLoop::TYPE_UI);
66
67 std::string json("[{}]");
68 profile_->GetExtensionMessageService()->
69 DispatchEventToRenderers(on_tab_close_event_name_, json);
70
71 // This may result in this object being destroyed.
72 extension_devtools_manager_->BridgeClosingForTab(tab_id_);
73 }
74
75 void ExtensionDevToolsBridge::SendMessageToClient(const IPC::Message& msg) {
76 IPC_BEGIN_MESSAGE_MAP(ExtensionDevToolsBridge, msg)
77 IPC_MESSAGE_HANDLER(DevToolsClientMsg_RpcMessage, OnRpcMessage);
78 IPC_MESSAGE_UNHANDLED_ERROR()
79 IPC_END_MESSAGE_MAP()
80 }
81
82 static const char kTimelineAgentClassName[] = "TimelineAgentClass";
83 static const char kPageEventMessageName[] = "PageEventMessage";
84 static const char kTabUrlChangeEventMessageName[] = "TabUrlChangeEventMessage";
85
86 void ExtensionDevToolsBridge::OnRpcMessage(const std::string& class_name,
87 const std::string& message_name,
88 const std::string& msg) {
89 DCHECK_EQ(MessageLoop::current()->type(), MessageLoop::TYPE_UI);
90 // TODO(jamesr): Update the filtering and message creation logic once
91 // the TimelineAgent lands in WebKit.
92 if (class_name == kTimelineAgentClassName) {
93 if (message_name == kPageEventMessageName) {
94 std::string json = StringPrintf("[{\"record\": \"%s\"}]", msg.c_str());
95 profile_->GetExtensionMessageService()->
96 DispatchEventToRenderers(on_page_event_name_, json);
97 } else if (message_name == kTabUrlChangeEventMessageName) {
98 std::string json = StringPrintf("[{\"record\": \"%s\"}]", msg.c_str());
99 profile_->GetExtensionMessageService()->
100 DispatchEventToRenderers(on_tab_url_change_event_name_, json);
101 }
102 }
103 }
104
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_devtools_bridge.h ('k') | chrome/browser/extensions/extension_devtools_browsertest.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698