diff options
-rw-r--r-- | chrome/browser/browser_init.cc | 1 | ||||
-rw-r--r-- | chrome/browser/browser_process_impl.cc | 204 | ||||
-rw-r--r-- | chrome/browser/browser_process_impl.h | 189 | ||||
-rw-r--r-- | chrome/browser/plugin_service.h | 1 | ||||
-rw-r--r-- | chrome/browser/renderer_host/resource_message_filter.cc | 1 | ||||
-rw-r--r-- | chrome/common/visitedlink_common.cc | 5 | ||||
-rw-r--r-- | chrome/common/visitedlink_common.h | 9 | ||||
-rw-r--r-- | chrome/renderer/render_thread.cc | 13 | ||||
-rw-r--r-- | chrome/renderer/render_thread.h | 16 | ||||
-rw-r--r-- | chrome_frame/test/net/fake_external_tab.cc | 1 |
10 files changed, 236 insertions, 204 deletions
diff --git a/chrome/browser/browser_init.cc b/chrome/browser/browser_init.cc index e5b15e2..1ac7f7b 100644 --- a/chrome/browser/browser_init.cc +++ b/chrome/browser/browser_init.cc @@ -14,6 +14,7 @@ #include "base/path_service.h" #include "base/scoped_ptr.h" #include "chrome/browser/automation/automation_provider.h" +#include "chrome/browser/automation/automation_provider_list.h" #include "chrome/browser/automation/chrome_frame_automation_provider.h" #include "chrome/browser/browser_list.h" #include "chrome/browser/browser_process.h" diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc index 2fac31a..0e6a96fa 100644 --- a/chrome/browser/browser_process_impl.cc +++ b/chrome/browser/browser_process_impl.cc @@ -14,6 +14,7 @@ #include "base/thread.h" #include "base/waitable_event.h" #include "chrome/browser/appcache/chrome_appcache_service.h" +#include "chrome/browser/automation/automation_provider_list.h" #include "chrome/browser/browser_child_process_host.h" #include "chrome/browser/browser_list.h" #include "chrome/browser/browser_main.h" @@ -262,6 +263,135 @@ void BrowserProcessImpl::EndSession() { MessageLoop::current()->Run(); } +ResourceDispatcherHost* BrowserProcessImpl::resource_dispatcher_host() { + DCHECK(CalledOnValidThread()); + if (!created_resource_dispatcher_host_) + CreateResourceDispatcherHost(); + return resource_dispatcher_host_.get(); +} + +MetricsService* BrowserProcessImpl::metrics_service() { + DCHECK(CalledOnValidThread()); + if (!created_metrics_service_) + CreateMetricsService(); + return metrics_service_.get(); +} + +IOThread* BrowserProcessImpl::io_thread() { + DCHECK(CalledOnValidThread()); + if (!created_io_thread_) + CreateIOThread(); + return io_thread_.get(); +} + +base::Thread* BrowserProcessImpl::file_thread() { + DCHECK(CalledOnValidThread()); + if (!created_file_thread_) + CreateFileThread(); + return file_thread_.get(); +} + +base::Thread* BrowserProcessImpl::db_thread() { + DCHECK(CalledOnValidThread()); + if (!created_db_thread_) + CreateDBThread(); + return db_thread_.get(); +} + +base::Thread* BrowserProcessImpl::process_launcher_thread() { + DCHECK(CalledOnValidThread()); + if (!created_process_launcher_thread_) + CreateProcessLauncherThread(); + return process_launcher_thread_.get(); +} + +base::Thread* BrowserProcessImpl::cache_thread() { + DCHECK(CalledOnValidThread()); + if (!created_cache_thread_) + CreateCacheThread(); + return cache_thread_.get(); +} + +#if defined(USE_X11) +base::Thread* BrowserProcessImpl::background_x11_thread() { + DCHECK(CalledOnValidThread()); + // The BACKGROUND_X11 thread is created when the IO thread is created. + if (!created_io_thread_) + CreateIOThread(); + return background_x11_thread_.get(); +} +#endif + +ProfileManager* BrowserProcessImpl::profile_manager() { + DCHECK(CalledOnValidThread()); + if (!created_profile_manager_) + CreateProfileManager(); + return profile_manager_.get(); +} + +PrefService* BrowserProcessImpl::local_state() { + DCHECK(CalledOnValidThread()); + if (!created_local_state_) + CreateLocalState(); + return local_state_.get(); +} + +DevToolsManager* BrowserProcessImpl::devtools_manager() { + DCHECK(CalledOnValidThread()); + if (!created_devtools_manager_) + CreateDevToolsManager(); + return devtools_manager_.get(); +} + +Clipboard* BrowserProcessImpl::clipboard() { + DCHECK(CalledOnValidThread()); + return clipboard_.get(); +} + +NotificationUIManager* BrowserProcessImpl::notification_ui_manager() { + DCHECK(CalledOnValidThread()); + if (!created_notification_ui_manager_) + CreateNotificationUIManager(); + return notification_ui_manager_.get(); +} + +StatusTrayManager* BrowserProcessImpl::status_tray_manager() { + DCHECK(CalledOnValidThread()); + if (!status_tray_manager_.get()) + CreateStatusTrayManager(); + return status_tray_manager_.get(); +} + +IconManager* BrowserProcessImpl::icon_manager() { + DCHECK(CalledOnValidThread()); + if (!created_icon_manager_) + CreateIconManager(); + return icon_manager_.get(); +} + +ThumbnailGenerator* BrowserProcessImpl::GetThumbnailGenerator() { + return &thumbnail_generator_; +} + +AutomationProviderList* BrowserProcessImpl::InitAutomationProviderList() { + DCHECK(CalledOnValidThread()); + if (automation_provider_list_.get() == NULL) { + automation_provider_list_.reset(AutomationProviderList::GetInstance()); + } + return automation_provider_list_.get(); +} + +void BrowserProcessImpl::InitDebuggerWrapper(int port, bool useHttp) { + DCHECK(CalledOnValidThread()); + if (!created_debugger_wrapper_) + CreateDebuggerWrapper(port, useHttp); +} + +bool BrowserProcessImpl::IsShuttingDown() { + DCHECK(CalledOnValidThread()); + return did_start_ && 0 == module_ref_count_; +} + printing::PrintJobManager* BrowserProcessImpl::print_job_manager() { // TODO(abarth): DCHECK(CalledOnValidThread()); // http://code.google.com/p/chromium/issues/detail?id=6828 @@ -271,6 +401,60 @@ printing::PrintJobManager* BrowserProcessImpl::print_job_manager() { return print_job_manager_.get(); } +GoogleURLTracker* BrowserProcessImpl::google_url_tracker() { + DCHECK(CalledOnValidThread()); + if (!google_url_tracker_.get()) + CreateGoogleURLTracker(); + return google_url_tracker_.get(); +} + +IntranetRedirectDetector* BrowserProcessImpl::intranet_redirect_detector() { + DCHECK(CalledOnValidThread()); + if (!intranet_redirect_detector_.get()) + CreateIntranetRedirectDetector(); + return intranet_redirect_detector_.get(); +} + +const std::string& BrowserProcessImpl::GetApplicationLocale() { + DCHECK(!locale_.empty()); + return locale_; +} + +void BrowserProcessImpl::SetApplicationLocale(const std::string& locale) { + locale_ = locale; + extension_l10n_util::SetProcessLocale(locale); +} + +base::WaitableEvent* BrowserProcessImpl::shutdown_event() { + return shutdown_event_.get(); +} + +TabCloseableStateWatcher* BrowserProcessImpl::tab_closeable_state_watcher() { + DCHECK(CalledOnValidThread()); + if (!tab_closeable_state_watcher_.get()) + CreateTabCloseableStateWatcher(); + return tab_closeable_state_watcher_.get(); +} + +void BrowserProcessImpl::CheckForInspectorFiles() { + file_thread()->message_loop()->PostTask + (FROM_HERE, + NewRunnableMethod(this, &BrowserProcessImpl::DoInspectorFilesCheck)); +} + +#if (defined(OS_WIN) || defined(OS_LINUX)) && !defined(OS_CHROMEOS) +void BrowserProcessImpl::StartAutoupdateTimer() { + autoupdate_timer_.Start( + base::TimeDelta::FromHours(kUpdateCheckIntervalHours), + this, + &BrowserProcessImpl::OnAutoupdateTimer); +} +#endif + +bool BrowserProcessImpl::have_inspector_files() const { + return have_inspector_files_; +} + void BrowserProcessImpl::ClearLocalState(const FilePath& profile_path) { SQLitePersistentCookieStore::ClearLocalState(profile_path.Append( chrome::kCookieFilename)); @@ -456,11 +640,6 @@ void BrowserProcessImpl::CreateNotificationUIManager() { created_notification_ui_manager_ = true; } -void BrowserProcessImpl::SetApplicationLocale(const std::string& locale) { - locale_ = locale; - extension_l10n_util::SetProcessLocale(locale); -} - void BrowserProcessImpl::CreateStatusTrayManager() { DCHECK(status_tray_manager_.get() == NULL); status_tray_manager_.reset(new StatusTrayManager()); @@ -475,21 +654,6 @@ void BrowserProcessImpl::CreateTabCloseableStateWatcher() { // which don't do any management. DISABLE_RUNNABLE_METHOD_REFCOUNT(BrowserProcessImpl); -void BrowserProcessImpl::CheckForInspectorFiles() { - file_thread()->message_loop()->PostTask - (FROM_HERE, - NewRunnableMethod(this, &BrowserProcessImpl::DoInspectorFilesCheck)); -} - -#if (defined(OS_WIN) || defined(OS_LINUX)) && !defined(OS_CHROMEOS) -void BrowserProcessImpl::StartAutoupdateTimer() { - autoupdate_timer_.Start( - base::TimeDelta::FromHours(kUpdateCheckIntervalHours), - this, - &BrowserProcessImpl::OnAutoupdateTimer); -} -#endif - #if defined(IPC_MESSAGE_LOG_ENABLED) void BrowserProcessImpl::SetIPCLoggingEnabled(bool enable) { diff --git a/chrome/browser/browser_process_impl.h b/chrome/browser/browser_process_impl.h index 25ddb4e..65ec61b 100644 --- a/chrome/browser/browser_process_impl.h +++ b/chrome/browser/browser_process_impl.h @@ -17,7 +17,6 @@ #include "base/non_thread_safe.h" #include "base/timer.h" #include "base/scoped_ptr.h" -#include "chrome/browser/automation/automation_provider_list.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/tab_contents/thumbnail_generator.h" #include "ipc/ipc_message.h" @@ -36,181 +35,43 @@ class BrowserProcessImpl : public BrowserProcess, public NonThreadSafe { virtual void EndSession(); - virtual ResourceDispatcherHost* resource_dispatcher_host() { - DCHECK(CalledOnValidThread()); - if (!created_resource_dispatcher_host_) - CreateResourceDispatcherHost(); - return resource_dispatcher_host_.get(); - } - - virtual MetricsService* metrics_service() { - DCHECK(CalledOnValidThread()); - if (!created_metrics_service_) - CreateMetricsService(); - return metrics_service_.get(); - } - - virtual IOThread* io_thread() { - DCHECK(CalledOnValidThread()); - if (!created_io_thread_) - CreateIOThread(); - return io_thread_.get(); - } - - virtual base::Thread* file_thread() { - DCHECK(CalledOnValidThread()); - if (!created_file_thread_) - CreateFileThread(); - return file_thread_.get(); - } - - virtual base::Thread* db_thread() { - DCHECK(CalledOnValidThread()); - if (!created_db_thread_) - CreateDBThread(); - return db_thread_.get(); - } - - virtual base::Thread* process_launcher_thread() { - DCHECK(CalledOnValidThread()); - if (!created_process_launcher_thread_) - CreateProcessLauncherThread(); - return process_launcher_thread_.get(); - } - - virtual base::Thread* cache_thread() { - DCHECK(CalledOnValidThread()); - if (!created_cache_thread_) - CreateCacheThread(); - return cache_thread_.get(); - } - + virtual ResourceDispatcherHost* resource_dispatcher_host(); + virtual MetricsService* metrics_service(); + virtual IOThread* io_thread(); + virtual base::Thread* file_thread(); + virtual base::Thread* db_thread(); + virtual base::Thread* process_launcher_thread(); + virtual base::Thread* cache_thread(); #if defined(USE_X11) - virtual base::Thread* background_x11_thread() { - DCHECK(CalledOnValidThread()); - // The BACKGROUND_X11 thread is created when the IO thread is created. - if (!created_io_thread_) - CreateIOThread(); - return background_x11_thread_.get(); - } + virtual base::Thread* background_x11_thread(); #endif - - virtual ProfileManager* profile_manager() { - DCHECK(CalledOnValidThread()); - if (!created_profile_manager_) - CreateProfileManager(); - return profile_manager_.get(); - } - - virtual PrefService* local_state() { - DCHECK(CalledOnValidThread()); - if (!created_local_state_) - CreateLocalState(); - return local_state_.get(); - } - - virtual DevToolsManager* devtools_manager() { - DCHECK(CalledOnValidThread()); - if (!created_devtools_manager_) - CreateDevToolsManager(); - return devtools_manager_.get(); - } - - virtual Clipboard* clipboard() { - DCHECK(CalledOnValidThread()); - return clipboard_.get(); - } - - virtual NotificationUIManager* notification_ui_manager() { - DCHECK(CalledOnValidThread()); - if (!created_notification_ui_manager_) - CreateNotificationUIManager(); - return notification_ui_manager_.get(); - } - - virtual StatusTrayManager* status_tray_manager() { - DCHECK(CalledOnValidThread()); - if (!status_tray_manager_.get()) - CreateStatusTrayManager(); - return status_tray_manager_.get(); - } - - virtual IconManager* icon_manager() { - DCHECK(CalledOnValidThread()); - if (!created_icon_manager_) - CreateIconManager(); - return icon_manager_.get(); - } - - virtual ThumbnailGenerator* GetThumbnailGenerator() { - return &thumbnail_generator_; - } - - virtual AutomationProviderList* InitAutomationProviderList() { - DCHECK(CalledOnValidThread()); - if (automation_provider_list_.get() == NULL) { - automation_provider_list_.reset(AutomationProviderList::GetInstance()); - } - return automation_provider_list_.get(); - } - - virtual void InitDebuggerWrapper(int port, bool useHttp) { - DCHECK(CalledOnValidThread()); - if (!created_debugger_wrapper_) - CreateDebuggerWrapper(port, useHttp); - } - + virtual ProfileManager* profile_manager(); + virtual PrefService* local_state(); + virtual DevToolsManager* devtools_manager(); + virtual Clipboard* clipboard(); + virtual NotificationUIManager* notification_ui_manager(); + virtual StatusTrayManager* status_tray_manager(); + virtual IconManager* icon_manager(); + virtual ThumbnailGenerator* GetThumbnailGenerator(); + virtual AutomationProviderList* InitAutomationProviderList(); + virtual void InitDebuggerWrapper(int port, bool useHttp); virtual unsigned int AddRefModule(); - virtual unsigned int ReleaseModule(); - - virtual bool IsShuttingDown() { - DCHECK(CalledOnValidThread()); - return did_start_ && 0 == module_ref_count_; - } - + virtual bool IsShuttingDown(); virtual printing::PrintJobManager* print_job_manager(); - - virtual GoogleURLTracker* google_url_tracker() { - DCHECK(CalledOnValidThread()); - if (!google_url_tracker_.get()) - CreateGoogleURLTracker(); - return google_url_tracker_.get(); - } - - virtual IntranetRedirectDetector* intranet_redirect_detector() { - DCHECK(CalledOnValidThread()); - if (!intranet_redirect_detector_.get()) - CreateIntranetRedirectDetector(); - return intranet_redirect_detector_.get(); - } - - virtual const std::string& GetApplicationLocale() { - DCHECK(!locale_.empty()); - return locale_; - } + virtual GoogleURLTracker* google_url_tracker(); + virtual IntranetRedirectDetector* intranet_redirect_detector(); + virtual const std::string& GetApplicationLocale(); virtual void SetApplicationLocale(const std::string& locale); - - virtual base::WaitableEvent* shutdown_event() { - return shutdown_event_.get(); - } - - virtual TabCloseableStateWatcher* tab_closeable_state_watcher() { - DCHECK(CalledOnValidThread()); - if (!tab_closeable_state_watcher_.get()) - CreateTabCloseableStateWatcher(); - return tab_closeable_state_watcher_.get(); - } - + virtual base::WaitableEvent* shutdown_event(); + virtual TabCloseableStateWatcher* tab_closeable_state_watcher(); virtual void CheckForInspectorFiles(); #if (defined(OS_WIN) || defined(OS_LINUX)) && !defined(OS_CHROMEOS) void StartAutoupdateTimer(); #endif - virtual bool have_inspector_files() const { - return have_inspector_files_; - } + virtual bool have_inspector_files() const; #if defined(IPC_MESSAGE_LOG_ENABLED) virtual void SetIPCLoggingEnabled(bool enable); diff --git a/chrome/browser/plugin_service.h b/chrome/browser/plugin_service.h index 0d90bd4..cd81b44 100644 --- a/chrome/browser/plugin_service.h +++ b/chrome/browser/plugin_service.h @@ -17,7 +17,6 @@ #include "base/ref_counted.h" #include "base/singleton.h" #include "base/waitable_event_watcher.h" -#include "chrome/browser/browser_process.h" #include "chrome/common/notification_observer.h" #include "chrome/common/notification_registrar.h" #include "googleurl/src/gurl.h" diff --git a/chrome/browser/renderer_host/resource_message_filter.cc b/chrome/browser/renderer_host/resource_message_filter.cc index ca9d668..bb6db3c 100644 --- a/chrome/browser/renderer_host/resource_message_filter.cc +++ b/chrome/browser/renderer_host/resource_message_filter.cc @@ -20,6 +20,7 @@ #include "base/worker_pool.h" #include "chrome/browser/appcache/appcache_dispatcher_host.h" #include "chrome/browser/browser_about_handler.h" +#include "chrome/browser/browser_process.h" #include "chrome/browser/child_process_security_policy.h" #include "chrome/browser/chrome_plugin_browsing_context.h" #include "chrome/browser/chrome_thread.h" diff --git a/chrome/common/visitedlink_common.cc b/chrome/common/visitedlink_common.cc index 2782311..899e7a6 100644 --- a/chrome/common/visitedlink_common.cc +++ b/chrome/common/visitedlink_common.cc @@ -6,6 +6,7 @@ #include "base/logging.h" #include "base/md5.h" +#include "googleurl/src/gurl.h" const VisitedLinkCommon::Fingerprint VisitedLinkCommon::null_fingerprint_ = 0; const VisitedLinkCommon::Hash VisitedLinkCommon::null_hash_ = -1; @@ -29,6 +30,10 @@ bool VisitedLinkCommon::IsVisited(const char* canonical_url, return IsVisited(ComputeURLFingerprint(canonical_url, url_len)); } +bool VisitedLinkCommon::IsVisited(const GURL& url) const { + return IsVisited(url.spec().data(), url.spec().size()); +} + bool VisitedLinkCommon::IsVisited(Fingerprint fingerprint) const { // Go through the table until we find the item or an empty spot (meaning it // wasn't found). This loop will terminate as long as the table isn't full, diff --git a/chrome/common/visitedlink_common.h b/chrome/common/visitedlink_common.h index 0e79c04..546bd4f 100644 --- a/chrome/common/visitedlink_common.h +++ b/chrome/common/visitedlink_common.h @@ -5,12 +5,11 @@ #ifndef CHROME_COMMON_VISITEDLINK_COMMON_H__ #define CHROME_COMMON_VISITEDLINK_COMMON_H__ -#include <string> #include <vector> #include "base/basictypes.h" -#include "base/logging.h" -#include "googleurl/src/gurl.h" + +class GURL; // number of bytes in the salt #define LINK_SALT_LENGTH 8 @@ -67,9 +66,7 @@ class VisitedLinkCommon { // computed if you call one with the string argument. Returns true if found. // Does not modify the hastable. bool IsVisited(const char* canonical_url, size_t url_len) const; - bool IsVisited(const GURL& url) const { - return IsVisited(url.spec().data(), url.spec().size()); - } + bool IsVisited(const GURL& url) const; bool IsVisited(Fingerprint fingerprint) const; #ifdef UNIT_TEST diff --git a/chrome/renderer/render_thread.cc b/chrome/renderer/render_thread.cc index 1ecd13c..5a0ac80 100644 --- a/chrome/renderer/render_thread.cc +++ b/chrome/renderer/render_thread.cc @@ -22,6 +22,8 @@ #include "chrome/common/child_process_logging.h" #include "chrome/common/chrome_switches.h" #include "chrome/common/db_message_filter.h" +#include "chrome/common/dom_storage_common.h" +#include "chrome/common/extensions/extension_extent.h" #include "chrome/common/plugin_messages.h" #include "chrome/common/render_messages.h" #include "chrome/common/renderer_preferences.h" @@ -44,6 +46,7 @@ #include "chrome/renderer/extensions/js_only_v8_extensions.h" #include "chrome/renderer/extensions/renderer_extension_bindings.h" #include "chrome/renderer/external_extension.h" +#include "chrome/renderer/gpu_channel_host.h" #include "chrome/renderer/indexed_db_dispatcher.h" #include "chrome/renderer/loadtimes_extension_bindings.h" #include "chrome/renderer/net/renderer_net_predictor.h" @@ -51,6 +54,7 @@ #include "chrome/renderer/render_process_impl.h" #include "chrome/renderer/render_view.h" #include "chrome/renderer/render_view_visitor.h" +#include "chrome/renderer/renderer_histogram_snapshots.h" #include "chrome/renderer/renderer_webindexeddatabase_impl.h" #include "chrome/renderer/renderer_webkitclient_impl.h" #include "chrome/renderer/spellchecker/spellcheck.h" @@ -191,6 +195,15 @@ class RenderViewZoomer : public RenderViewVisitor { }; } // namespace +// Contains extension-related data that the renderer needs to know about. +// TODO(mpcomplete): this doesn't feel like it belongs here. Find a better +// place. +struct RenderThread::ExtensionInfo { + std::string extension_id; + ExtensionExtent web_extent; + ExtensionExtent browse_extent; +}; + // When we run plugins in process, we actually run them on the render thread, // which means that we need to make the render thread pump UI events. RenderThread::RenderThread() { diff --git a/chrome/renderer/render_thread.h b/chrome/renderer/render_thread.h index 70c5516..9fbb1ed 100644 --- a/chrome/renderer/render_thread.h +++ b/chrome/renderer/render_thread.h @@ -17,10 +17,6 @@ #include "build/build_config.h" #include "chrome/common/child_thread.h" #include "chrome/common/css_colors.h" -#include "chrome/common/dom_storage_common.h" -#include "chrome/common/extensions/extension_extent.h" -#include "chrome/renderer/gpu_channel_host.h" -#include "chrome/renderer/renderer_histogram_snapshots.h" #include "chrome/renderer/visitedlink_slave.h" #include "gfx/native_widget_types.h" #include "ipc/ipc_channel_handle.h" @@ -31,10 +27,12 @@ class CookieMessageFilter; class DBMessageFilter; class DevToolsAgentFilter; class FilePath; +class GpuChannelHost; class IndexedDBDispatcher; class ListValue; class NullableString16; class RendererHistogram; +class RendererHistogramSnapshots; class RendererNetPredictor; class RendererWebKitClientImpl; class SpellCheck; @@ -225,15 +223,6 @@ class RenderThread : public RenderThreadBase, std::string GetExtensionIdByBrowseExtent(const GURL& url); private: - // Contains extension-related data that the renderer needs to know about. - // TODO(mpcomplete): this doesn't feel like it belongs here. Find a better - // place. - struct ExtensionInfo { - std::string extension_id; - ExtensionExtent web_extent; - ExtensionExtent browse_extent; - }; - virtual void OnControlMessageReceived(const IPC::Message& msg); void Init(); @@ -368,6 +357,7 @@ class RenderThread : public RenderThreadBase, // A list of extension web extents, which tells us which URLs belong to an // installed app. + struct ExtensionInfo; std::vector<ExtensionInfo> extension_extents_; DISALLOW_COPY_AND_ASSIGN(RenderThread); diff --git a/chrome_frame/test/net/fake_external_tab.cc b/chrome_frame/test/net/fake_external_tab.cc index fbdc192..5d8e37f 100644 --- a/chrome_frame/test/net/fake_external_tab.cc +++ b/chrome_frame/test/net/fake_external_tab.cc @@ -19,6 +19,7 @@ #include "base/scoped_comptr_win.h" #include "base/scoped_variant_win.h" +#include "chrome/browser/automation/automation_provider_list.h" #include "chrome/browser/browser_prefs.h" #include "chrome/browser/plugin_service.h" #include "chrome/browser/pref_service.h" |