OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "extensions/renderer/dispatcher.h" | 5 #include "extensions/renderer/dispatcher.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/callback.h" | 8 #include "base/callback.h" |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/debug/alias.h" | 10 #include "base/debug/alias.h" |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
187 Dispatcher::Dispatcher(DispatcherDelegate* delegate) | 187 Dispatcher::Dispatcher(DispatcherDelegate* delegate) |
188 : delegate_(delegate), | 188 : delegate_(delegate), |
189 content_watcher_(new ContentWatcher()), | 189 content_watcher_(new ContentWatcher()), |
190 source_map_(&ResourceBundle::GetSharedInstance()), | 190 source_map_(&ResourceBundle::GetSharedInstance()), |
191 v8_schema_registry_(new V8SchemaRegistry), | 191 v8_schema_registry_(new V8SchemaRegistry), |
192 is_webkit_initialized_(false), | 192 is_webkit_initialized_(false), |
193 user_script_set_manager_observer_(this), | 193 user_script_set_manager_observer_(this), |
194 webrequest_used_(false) { | 194 webrequest_used_(false) { |
195 const base::CommandLine& command_line = | 195 const base::CommandLine& command_line = |
196 *(base::CommandLine::ForCurrentProcess()); | 196 *(base::CommandLine::ForCurrentProcess()); |
197 is_extension_process_ = | 197 set_idle_notifications_ = |
198 command_line.HasSwitch(switches::kExtensionProcess) || | 198 command_line.HasSwitch(switches::kExtensionProcess) || |
199 command_line.HasSwitch(::switches::kSingleProcess); | 199 command_line.HasSwitch(::switches::kSingleProcess); |
200 | 200 |
201 if (is_extension_process_) { | 201 if (set_idle_notifications_) { |
202 RenderThread::Get()->SetIdleNotificationDelayInMs( | 202 RenderThread::Get()->SetIdleNotificationDelayInMs( |
203 kInitialExtensionIdleHandlerDelayMs); | 203 kInitialExtensionIdleHandlerDelayMs); |
204 } | 204 } |
205 | 205 |
206 RenderThread::Get()->RegisterExtension(SafeBuiltins::CreateV8Extension()); | 206 RenderThread::Get()->RegisterExtension(SafeBuiltins::CreateV8Extension()); |
207 | 207 |
208 user_script_set_manager_.reset(new UserScriptSetManager(&extensions_)); | 208 user_script_set_manager_.reset(new UserScriptSetManager(&extensions_)); |
209 script_injection_manager_.reset( | 209 script_injection_manager_.reset( |
210 new ScriptInjectionManager(&extensions_, user_script_set_manager_.get())); | 210 new ScriptInjectionManager(&extensions_, user_script_set_manager_.get())); |
211 user_script_set_manager_observer_.Add(user_script_set_manager_.get()); | 211 user_script_set_manager_observer_.Add(user_script_set_manager_.get()); |
(...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
520 if (user_gesture) | 520 if (user_gesture) |
521 web_user_gesture.reset(new WebScopedUserGesture); | 521 web_user_gesture.reset(new WebScopedUserGesture); |
522 | 522 |
523 script_context_set_.ForEach( | 523 script_context_set_.ForEach( |
524 extension_id, | 524 extension_id, |
525 render_view, | 525 render_view, |
526 base::Bind(&CallModuleMethod, module_name, function_name, &args)); | 526 base::Bind(&CallModuleMethod, module_name, function_name, &args)); |
527 | 527 |
528 // Reset the idle handler each time there's any activity like event or message | 528 // Reset the idle handler each time there's any activity like event or message |
529 // dispatch, for which Invoke is the chokepoint. | 529 // dispatch, for which Invoke is the chokepoint. |
530 if (is_extension_process_) { | 530 if (set_idle_notifications_) { |
531 RenderThread::Get()->ScheduleIdleHandler( | 531 RenderThread::Get()->ScheduleIdleHandler( |
532 kInitialExtensionIdleHandlerDelayMs); | 532 kInitialExtensionIdleHandlerDelayMs); |
533 } | 533 } |
534 | 534 |
535 // Tell the browser process when an event has been dispatched with a lazy | 535 // Tell the browser process when an event has been dispatched with a lazy |
536 // background page active. | 536 // background page active. |
537 const Extension* extension = extensions_.GetByID(extension_id); | 537 const Extension* extension = extensions_.GetByID(extension_id); |
538 if (extension && BackgroundInfo::HasLazyBackgroundPage(extension) && | 538 if (extension && BackgroundInfo::HasLazyBackgroundPage(extension) && |
539 module_name == kEventBindings && | 539 module_name == kEventBindings && |
540 function_name == kEventDispatchFunction) { | 540 function_name == kEventDispatchFunction) { |
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
818 ContentWatcher::OnWatchPages) | 818 ContentWatcher::OnWatchPages) |
819 IPC_MESSAGE_UNHANDLED(handled = false) | 819 IPC_MESSAGE_UNHANDLED(handled = false) |
820 IPC_END_MESSAGE_MAP() | 820 IPC_END_MESSAGE_MAP() |
821 | 821 |
822 return handled; | 822 return handled; |
823 } | 823 } |
824 | 824 |
825 void Dispatcher::WebKitInitialized() { | 825 void Dispatcher::WebKitInitialized() { |
826 // For extensions, we want to ensure we call the IdleHandler every so often, | 826 // For extensions, we want to ensure we call the IdleHandler every so often, |
827 // even if the extension keeps up activity. | 827 // even if the extension keeps up activity. |
828 if (is_extension_process_) { | 828 if (set_idle_notifications_) { |
829 forced_idle_timer_.reset(new base::RepeatingTimer<content::RenderThread>); | 829 forced_idle_timer_.reset(new base::RepeatingTimer<content::RenderThread>); |
830 forced_idle_timer_->Start( | 830 forced_idle_timer_->Start( |
831 FROM_HERE, | 831 FROM_HERE, |
832 base::TimeDelta::FromMilliseconds(kMaxExtensionIdleHandlerDelayMs), | 832 base::TimeDelta::FromMilliseconds(kMaxExtensionIdleHandlerDelayMs), |
833 RenderThread::Get(), | 833 RenderThread::Get(), |
834 &RenderThread::IdleHandler); | 834 &RenderThread::IdleHandler); |
835 } | 835 } |
836 | 836 |
837 // Initialize host permissions for any extensions that were activated before | 837 // Initialize host permissions for any extensions that were activated before |
838 // WebKit was initialized. | 838 // WebKit was initialized. |
839 for (std::set<std::string>::iterator iter = active_extension_ids_.begin(); | 839 for (std::set<std::string>::iterator iter = active_extension_ids_.begin(); |
840 iter != active_extension_ids_.end(); | 840 iter != active_extension_ids_.end(); |
841 ++iter) { | 841 ++iter) { |
842 const Extension* extension = extensions_.GetByID(*iter); | 842 const Extension* extension = extensions_.GetByID(*iter); |
843 CHECK(extension); | 843 CHECK(extension); |
844 | 844 |
845 InitOriginPermissions(extension); | 845 InitOriginPermissions(extension); |
846 } | 846 } |
847 | 847 |
848 EnableCustomElementWhiteList(); | 848 EnableCustomElementWhiteList(); |
849 | 849 |
850 is_webkit_initialized_ = true; | 850 is_webkit_initialized_ = true; |
851 } | 851 } |
852 | 852 |
853 void Dispatcher::IdleNotification() { | 853 void Dispatcher::IdleNotification() { |
854 if (is_extension_process_ && forced_idle_timer_) { | 854 if (set_idle_notifications_ && forced_idle_timer_) { |
855 // Dampen the forced delay as well if the extension stays idle for long | 855 // Dampen the forced delay as well if the extension stays idle for long |
856 // periods of time. (forced_idle_timer_ can be NULL after | 856 // periods of time. (forced_idle_timer_ can be NULL after |
857 // OnRenderProcessShutdown has been called.) | 857 // OnRenderProcessShutdown has been called.) |
858 int64 forced_delay_ms = | 858 int64 forced_delay_ms = |
859 std::max(RenderThread::Get()->GetIdleNotificationDelayInMs(), | 859 std::max(RenderThread::Get()->GetIdleNotificationDelayInMs(), |
860 kMaxExtensionIdleHandlerDelayMs); | 860 kMaxExtensionIdleHandlerDelayMs); |
861 forced_idle_timer_->Stop(); | 861 forced_idle_timer_->Stop(); |
862 forced_idle_timer_->Start( | 862 forced_idle_timer_->Start( |
863 FROM_HERE, | 863 FROM_HERE, |
864 base::TimeDelta::FromMilliseconds(forced_delay_ms), | 864 base::TimeDelta::FromMilliseconds(forced_delay_ms), |
(...skipping 679 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1544 return v8::Handle<v8::Object>(); | 1544 return v8::Handle<v8::Object>(); |
1545 | 1545 |
1546 if (bind_name) | 1546 if (bind_name) |
1547 *bind_name = split.back(); | 1547 *bind_name = split.back(); |
1548 | 1548 |
1549 return bind_object.IsEmpty() ? AsObjectOrEmpty(GetOrCreateChrome(context)) | 1549 return bind_object.IsEmpty() ? AsObjectOrEmpty(GetOrCreateChrome(context)) |
1550 : bind_object; | 1550 : bind_object; |
1551 } | 1551 } |
1552 | 1552 |
1553 } // namespace extensions | 1553 } // namespace extensions |
OLD | NEW |