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 #include "chrome/browser/extensions/event_router_forwarder.h" | 5 #include "chrome/browser/extensions/event_router_forwarder.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/values.h" |
8 #include "chrome/browser/browser_process.h" | 9 #include "chrome/browser/browser_process.h" |
9 #include "chrome/browser/extensions/event_router.h" | 10 #include "chrome/browser/extensions/event_router.h" |
10 #include "chrome/browser/profiles/profile_manager.h" | 11 #include "chrome/browser/profiles/profile_manager.h" |
11 #include "googleurl/src/gurl.h" | 12 #include "googleurl/src/gurl.h" |
12 | 13 |
13 using content::BrowserThread; | 14 using content::BrowserThread; |
14 | 15 |
15 namespace extensions { | 16 namespace extensions { |
16 | 17 |
17 EventRouterForwarder::EventRouterForwarder() { | 18 EventRouterForwarder::EventRouterForwarder() { |
18 } | 19 } |
19 | 20 |
20 EventRouterForwarder::~EventRouterForwarder() { | 21 EventRouterForwarder::~EventRouterForwarder() { |
21 } | 22 } |
22 | 23 |
23 void EventRouterForwarder::BroadcastEventToRenderers( | 24 void EventRouterForwarder::BroadcastEventToRenderers( |
24 const std::string& event_name, | 25 const std::string& event_name, |
25 const std::string& event_args, | 26 scoped_ptr<base::ListValue> event_args, |
26 const GURL& event_url) { | 27 const GURL& event_url) { |
27 HandleEvent("", event_name, event_args, 0, true, event_url); | 28 HandleEvent("", event_name, event_args.Pass(), 0, true, event_url); |
28 } | 29 } |
29 | 30 |
30 void EventRouterForwarder::DispatchEventToRenderers( | 31 void EventRouterForwarder::DispatchEventToRenderers( |
31 const std::string& event_name, | 32 const std::string& event_name, |
32 const std::string& event_args, | 33 scoped_ptr<base::ListValue> event_args, |
33 void* profile, | 34 void* profile, |
34 bool use_profile_to_restrict_events, | 35 bool use_profile_to_restrict_events, |
35 const GURL& event_url) { | 36 const GURL& event_url) { |
36 if (!profile) | 37 if (!profile) |
37 return; | 38 return; |
38 HandleEvent("", event_name, event_args, profile, | 39 HandleEvent("", event_name, event_args.Pass(), profile, |
39 use_profile_to_restrict_events, event_url); | 40 use_profile_to_restrict_events, event_url); |
40 } | 41 } |
41 | 42 |
42 void EventRouterForwarder::BroadcastEventToExtension( | 43 void EventRouterForwarder::BroadcastEventToExtension( |
43 const std::string& extension_id, | 44 const std::string& extension_id, |
44 const std::string& event_name, | 45 const std::string& event_name, |
45 const std::string& event_args, | 46 scoped_ptr<base::ListValue> event_args, |
46 const GURL& event_url) { | 47 const GURL& event_url) { |
47 HandleEvent(extension_id, event_name, event_args, 0, true, event_url); | 48 HandleEvent(extension_id, event_name, event_args.Pass(), 0, true, event_url); |
48 } | 49 } |
49 | 50 |
50 void EventRouterForwarder::DispatchEventToExtension( | 51 void EventRouterForwarder::DispatchEventToExtension( |
51 const std::string& extension_id, | 52 const std::string& extension_id, |
52 const std::string& event_name, | 53 const std::string& event_name, |
53 const std::string& event_args, | 54 scoped_ptr<base::ListValue> event_args, |
54 void* profile, | 55 void* profile, |
55 bool use_profile_to_restrict_events, | 56 bool use_profile_to_restrict_events, |
56 const GURL& event_url) { | 57 const GURL& event_url) { |
57 if (!profile) | 58 if (!profile) |
58 return; | 59 return; |
59 HandleEvent(extension_id, event_name, event_args, profile, | 60 HandleEvent(extension_id, event_name, event_args.Pass(), profile, |
60 use_profile_to_restrict_events, event_url); | 61 use_profile_to_restrict_events, event_url); |
61 } | 62 } |
62 | 63 |
63 void EventRouterForwarder::HandleEvent(const std::string& extension_id, | 64 void EventRouterForwarder::HandleEvent(const std::string& extension_id, |
64 const std::string& event_name, | 65 const std::string& event_name, |
65 const std::string& event_args, | 66 scoped_ptr<ListValue> event_args, |
66 void* profile_ptr, | 67 void* profile_ptr, |
67 bool use_profile_to_restrict_events, | 68 bool use_profile_to_restrict_events, |
68 const GURL& event_url) { | 69 const GURL& event_url) { |
69 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { | 70 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { |
70 BrowserThread::PostTask( | 71 BrowserThread::PostTask( |
71 BrowserThread::UI, FROM_HERE, | 72 BrowserThread::UI, FROM_HERE, |
72 base::Bind(&EventRouterForwarder::HandleEvent, this, | 73 base::Bind(&EventRouterForwarder::HandleEvent, this, |
73 extension_id, event_name, event_args, profile_ptr, | 74 extension_id, event_name, Passed(&event_args), profile_ptr, |
74 use_profile_to_restrict_events, event_url)); | 75 use_profile_to_restrict_events, event_url)); |
75 return; | 76 return; |
76 } | 77 } |
77 | 78 |
78 if (!g_browser_process || !g_browser_process->profile_manager()) | 79 if (!g_browser_process || !g_browser_process->profile_manager()) |
79 return; | 80 return; |
80 | 81 |
81 ProfileManager* profile_manager = g_browser_process->profile_manager(); | 82 ProfileManager* profile_manager = g_browser_process->profile_manager(); |
82 Profile* profile = NULL; | 83 Profile* profile = NULL; |
83 if (profile_ptr) { | 84 if (profile_ptr) { |
84 profile = reinterpret_cast<Profile*>(profile_ptr); | 85 profile = reinterpret_cast<Profile*>(profile_ptr); |
85 if (!profile_manager->IsValidProfile(profile)) | 86 if (!profile_manager->IsValidProfile(profile)) |
86 return; | 87 return; |
87 } | 88 } |
88 if (profile) { | 89 if (profile) { |
89 CallEventRouter(profile, extension_id, event_name, event_args, | 90 CallEventRouter(profile, extension_id, event_name, event_args.Pass(), |
90 use_profile_to_restrict_events ? profile : NULL, event_url); | 91 use_profile_to_restrict_events ? profile : NULL, event_url); |
91 } else { | 92 } else { |
92 std::vector<Profile*> profiles(profile_manager->GetLoadedProfiles()); | 93 std::vector<Profile*> profiles(profile_manager->GetLoadedProfiles()); |
93 for (size_t i = 0; i < profiles.size(); ++i) { | 94 for (size_t i = 0; i < profiles.size(); ++i) { |
94 CallEventRouter( | 95 CallEventRouter( |
95 profiles[i], extension_id, event_name, event_args, | 96 profiles[i], extension_id, event_name, event_args.Pass(), |
96 use_profile_to_restrict_events ? profiles[i] : NULL, event_url); | 97 use_profile_to_restrict_events ? profiles[i] : NULL, event_url); |
97 } | 98 } |
98 } | 99 } |
99 } | 100 } |
100 | 101 |
101 void EventRouterForwarder::CallEventRouter(Profile* profile, | 102 void EventRouterForwarder::CallEventRouter(Profile* profile, |
102 const std::string& extension_id, | 103 const std::string& extension_id, |
103 const std::string& event_name, | 104 const std::string& event_name, |
104 const std::string& event_args, | 105 scoped_ptr<ListValue> event_args, |
105 Profile* restrict_to_profile, | 106 Profile* restrict_to_profile, |
106 const GURL& event_url) { | 107 const GURL& event_url) { |
107 // We may not have an extension in cases like chromeos login | 108 // We may not have an extension in cases like chromeos login |
108 // (crosbug.com/12856), chrome_frame_net_tests.exe which reuses the chrome | 109 // (crosbug.com/12856), chrome_frame_net_tests.exe which reuses the chrome |
109 // browser single process framework. | 110 // browser single process framework. |
110 if (!profile->GetExtensionEventRouter()) | 111 if (!profile->GetExtensionEventRouter()) |
111 return; | 112 return; |
112 | 113 |
113 if (extension_id.empty()) { | 114 if (extension_id.empty()) { |
114 profile->GetExtensionEventRouter()-> | 115 profile->GetExtensionEventRouter()-> |
115 DispatchEventToRenderers( | 116 DispatchEventToRenderers( |
116 event_name, event_args, restrict_to_profile, event_url, | 117 event_name, event_args.Pass(), restrict_to_profile, event_url, |
117 EventFilteringInfo()); | 118 EventFilteringInfo()); |
118 } else { | 119 } else { |
119 profile->GetExtensionEventRouter()-> | 120 profile->GetExtensionEventRouter()-> |
120 DispatchEventToExtension( | 121 DispatchEventToExtension( |
121 extension_id, | 122 extension_id, |
122 event_name, event_args, restrict_to_profile, event_url); | 123 event_name, event_args.Pass(), restrict_to_profile, event_url); |
123 } | 124 } |
124 } | 125 } |
125 | 126 |
126 } // namespace extensions | 127 } // namespace extensions |
OLD | NEW |