diff options
author | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-23 16:58:56 +0000 |
---|---|---|
committer | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-23 16:58:56 +0000 |
commit | 77a6970c962882244b57219681acd109acd9f3fc (patch) | |
tree | bfdee205ae3fa4e83ce3f605a465f448eb378d2e | |
parent | 875862339838ec489d0de577be8b64ce3ba72bd9 (diff) | |
download | chromium_src-77a6970c962882244b57219681acd109acd9f3fc.zip chromium_src-77a6970c962882244b57219681acd109acd9f3fc.tar.gz chromium_src-77a6970c962882244b57219681acd109acd9f3fc.tar.bz2 |
Remove extension dependency from BrowserRenderProcessHost.
Review URL: http://codereview.chromium.org/6882089
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@82796 0039d316-1c4b-4281-b951-d872f2087c98
10 files changed, 125 insertions, 146 deletions
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc index 8b7c516..00f1800 100644 --- a/chrome/browser/extensions/extension_service.cc +++ b/chrome/browser/extensions/extension_service.cc @@ -62,12 +62,14 @@ #include "chrome/common/extensions/extension_error_utils.h" #include "chrome/common/extensions/extension_file_util.h" #include "chrome/common/extensions/extension_l10n_util.h" +#include "chrome/common/extensions/extension_messages.h" #include "chrome/common/extensions/extension_resource.h" #include "chrome/common/pref_names.h" #include "chrome/common/url_constants.h" #include "content/browser/browser_thread.h" #include "content/browser/plugin_process_host.h" #include "content/browser/plugin_service.h" +#include "content/browser/renderer_host/render_process_host.h" #include "content/common/json_value_serializer.h" #include "content/common/notification_service.h" #include "content/common/notification_type.h" @@ -436,6 +438,8 @@ ExtensionService::ExtensionService(Profile* profile, registrar_.Add(this, NotificationType::EXTENSION_PROCESS_TERMINATED, NotificationService::AllSources()); + registrar_.Add(this, NotificationType::RENDERER_PROCESS_CREATED, + NotificationService::AllSources()); pref_change_registrar_.Init(profile->GetPrefs()); pref_change_registrar_.Add(prefs::kExtensionInstallAllowList, this); pref_change_registrar_.Add(prefs::kExtensionInstallDenyList, this); @@ -1087,6 +1091,12 @@ void ExtensionService::NotifyExtensionLoaded(const Extension* extension) { Source<Profile>(profile_), Details<const Extension>(extension)); + for (RenderProcessHost::iterator i(RenderProcessHost::AllHostsIterator()); + !i.IsAtEnd(); i.Advance()) { + i.GetCurrentValue()->Send( + new ExtensionMsg_Loaded(ExtensionMsg_Loaded_Params(extension))); + } + bool plugins_changed = false; for (size_t i = 0; i < extension->plugins().size(); ++i) { const Extension::PluginInfo& plugin = extension->plugins()[i]; @@ -1121,6 +1131,11 @@ void ExtensionService::NotifyExtensionUnloaded( Source<Profile>(profile_), Details<UnloadedExtensionInfo>(&details)); + for (RenderProcessHost::iterator i(RenderProcessHost::AllHostsIterator()); + !i.IsAtEnd(); i.Advance()) { + i.GetCurrentValue()->Send(new ExtensionMsg_Unloaded(extension->id())); + } + if (profile_) { profile_->UnregisterExtensionWithRequestContexts(extension); profile_->GetExtensionSpecialStoragePolicy()-> @@ -2028,7 +2043,25 @@ void ExtensionService::Observe(NotificationType type, UnloadedExtensionInfo::DISABLE)); break; } - + case NotificationType::RENDERER_PROCESS_CREATED: { + RenderProcessHost* process = Source<RenderProcessHost>(source).ptr(); + // Valid extension function names, used to setup bindings in renderer. + std::vector<std::string> function_names; + ExtensionFunctionDispatcher::GetAllFunctionNames(&function_names); + process->Send(new ExtensionMsg_SetFunctionNames(function_names)); + + // Scripting whitelist. This is modified by tests and must be communicated + // to renderers. + process->Send(new ExtensionMsg_SetScriptingWhitelist( + *Extension::GetScriptingWhitelist())); + + // Loaded extensions. + for (size_t i = 0; i < extensions_.size(); ++i) { + process->Send(new ExtensionMsg_Loaded( + ExtensionMsg_Loaded_Params(extensions_[i]))); + } + break; + } case NotificationType::PREF_CHANGED: { std::string* pref_name = Details<std::string>(details).ptr(); if (*pref_name == prefs::kExtensionInstallAllowList || diff --git a/chrome/browser/extensions/user_script_master.cc b/chrome/browser/extensions/user_script_master.cc index 88903d8..1bbab5d 100644 --- a/chrome/browser/extensions/user_script_master.cc +++ b/chrome/browser/extensions/user_script_master.cc @@ -18,8 +18,10 @@ #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/profiles/profile.h" #include "chrome/common/extensions/extension.h" +#include "chrome/common/extensions/extension_messages.h" #include "chrome/common/extensions/extension_resource.h" #include "chrome/common/url_constants.h" +#include "content/browser/renderer_host/render_process_host.h" #include "content/common/notification_service.h" #include "net/base/net_util.h" @@ -303,6 +305,8 @@ UserScriptMaster::UserScriptMaster(const FilePath& script_dir, Profile* profile) Source<Profile>(profile_)); registrar_.Add(this, NotificationType::EXTENSION_USER_SCRIPTS_UPDATED, Source<Profile>(profile_)); + registrar_.Add(this, NotificationType::RENDERER_PROCESS_CREATED, + NotificationService::AllSources()); } UserScriptMaster::~UserScriptMaster() { @@ -325,6 +329,11 @@ void UserScriptMaster::NewScriptsAvailable(base::SharedMemory* handle) { // We've got scripts ready to go. shared_memory_.swap(handle_deleter); + for (RenderProcessHost::iterator i(RenderProcessHost::AllHostsIterator()); + !i.IsAtEnd(); i.Advance()) { + SendUpdate(i.GetCurrentValue(), handle); + } + NotificationService::current()->Notify( NotificationType::USER_SCRIPTS_UPDATED, Source<Profile>(profile_), @@ -387,7 +396,12 @@ void UserScriptMaster::Observe(NotificationType type, StartScan(); break; } - + case NotificationType::RENDERER_PROCESS_CREATED: { + RenderProcessHost* process = Source<RenderProcessHost>(source).ptr(); + if (ScriptsReady()) + SendUpdate(process, GetSharedMemory()); + break; + } default: DCHECK(false); } @@ -399,3 +413,19 @@ void UserScriptMaster::StartScan() { script_reloader_->StartScan(user_script_dir_, lone_scripts_); } + +void UserScriptMaster::SendUpdate(RenderProcessHost* process, + base::SharedMemory* shared_memory) { + // If the process is being started asynchronously, early return. We'll end up + // calling InitUserScripts when it's created which will call this again. + base::ProcessHandle handle = process->GetHandle(); + if (!handle) + return; + + base::SharedMemoryHandle handle_for_process; + if (!shared_memory->ShareToProcess(handle, &handle_for_process)) + return; // This can legitimately fail if the renderer asserts at startup. + + if (base::SharedMemory::IsHandleValid(handle_for_process)) + process->Send(new ExtensionMsg_UpdateUserScripts(handle_for_process)); +} diff --git a/chrome/browser/extensions/user_script_master.h b/chrome/browser/extensions/user_script_master.h index 3b883df..4a21eb0 100644 --- a/chrome/browser/extensions/user_script_master.h +++ b/chrome/browser/extensions/user_script_master.h @@ -20,6 +20,7 @@ class StringPiece; } class Profile; +class RenderProcessHost; // Manages a segment of shared memory that contains the user scripts the user // has installed. Lives on the UI thread. @@ -129,6 +130,10 @@ class UserScriptMaster : public base::RefCountedThreadSafe<UserScriptMaster>, const NotificationSource& source, const NotificationDetails& details); + // Sends the renderer process a new set of user scripts. + void SendUpdate(RenderProcessHost* process, + base::SharedMemory* shared_memory); + // Manages our notification registrations. NotificationRegistrar registrar_; diff --git a/chrome/browser/extensions/user_script_master_unittest.cc b/chrome/browser/extensions/user_script_master_unittest.cc index 14cc21b..30ab5e8 100644 --- a/chrome/browser/extensions/user_script_master_unittest.cc +++ b/chrome/browser/extensions/user_script_master_unittest.cc @@ -40,10 +40,13 @@ class UserScriptMasterTest : public testing::Test, // thread look like one. file_thread_.reset(new BrowserThread( BrowserThread::FILE, MessageLoop::current())); + ui_thread_.reset(new BrowserThread( + BrowserThread::UI, MessageLoop::current())); } virtual void TearDown() { file_thread_.reset(); + ui_thread_.reset(); } virtual void Observe(NotificationType type, @@ -65,6 +68,7 @@ class UserScriptMasterTest : public testing::Test, MessageLoop message_loop_; scoped_ptr<BrowserThread> file_thread_; + scoped_ptr<BrowserThread> ui_thread_; // Updated to the script shared memory when we get notified. base::SharedMemory* shared_memory_; diff --git a/chrome/browser/renderer_host/chrome_render_message_filter.cc b/chrome/browser/renderer_host/chrome_render_message_filter.cc index 67e8286..8094fe5 100644 --- a/chrome/browser/renderer_host/chrome_render_message_filter.cc +++ b/chrome/browser/renderer_host/chrome_render_message_filter.cc @@ -7,6 +7,7 @@ #include "base/file_path.h" #include "base/metrics/histogram.h" #include "chrome/browser/browser_process.h" +#include "chrome/browser/extensions/extension_event_router.h" #include "chrome/browser/extensions/extension_message_service.h" #include "chrome/browser/metrics/histogram_synchronizer.h" #include "chrome/browser/nacl_host/nacl_process_host.h" @@ -20,6 +21,7 @@ #include "chrome/common/extensions/extension_messages.h" #include "chrome/common/pref_names.h" #include "chrome/common/render_messages.h" +#include "content/browser/renderer_host/render_process_host.h" #include "content/browser/renderer_host/resource_dispatcher_host.h" #if defined(USE_TCMALLOC) @@ -57,6 +59,10 @@ bool ChromeRenderMessageFilter::OnMessageReceived(const IPC::Message& message, IPC_MESSAGE_HANDLER(ExtensionHostMsg_OpenChannelToTab, OnOpenChannelToTab) IPC_MESSAGE_HANDLER_DELAY_REPLY(ExtensionHostMsg_GetMessageBundle, OnGetExtensionMessageBundle) + IPC_MESSAGE_HANDLER(ExtensionHostMsg_AddListener, OnExtensionAddListener) + IPC_MESSAGE_HANDLER(ExtensionHostMsg_RemoveListener, + OnExtensionRemoveListener) + IPC_MESSAGE_HANDLER(ExtensionHostMsg_CloseChannel, OnExtensionCloseChannel) #if defined(USE_TCMALLOC) IPC_MESSAGE_HANDLER(ViewHostMsg_RendererTcmalloc, OnRendererTcmalloc) #endif @@ -75,12 +81,18 @@ void ChromeRenderMessageFilter::OnDestruct() const { void ChromeRenderMessageFilter::OverrideThreadForMessage( const IPC::Message& message, BrowserThread::ID* thread) { - if (message.type() == ViewHostMsg_ResourceTypeStats::ID || + switch (message.type()) { + case ViewHostMsg_ResourceTypeStats::ID: #if defined(USE_TCMALLOC) - message.type() == ViewHostMsg_RendererTcmalloc::ID || + case ViewHostMsg_RendererTcmalloc::ID: #endif - message.type() == ViewHostMsg_ResourceTypeStats::ID) { - *thread = BrowserThread::UI; + case ExtensionHostMsg_AddListener::ID: + case ExtensionHostMsg_RemoveListener::ID: + case ExtensionHostMsg_CloseChannel::ID: + *thread = BrowserThread::UI; + break; + default: + break; } } @@ -227,6 +239,34 @@ void ChromeRenderMessageFilter::OnGetExtensionMessageBundleOnFileThread( Send(reply_msg); } +void ChromeRenderMessageFilter::OnExtensionAddListener( + const std::string& extension_id, + const std::string& event_name) { + RenderProcessHost* process = RenderProcessHost::FromID(render_process_id_); + if (!profile_->GetExtensionEventRouter() || !process) + return; + + profile_->GetExtensionEventRouter()->AddEventListener( + event_name, process, extension_id); +} + +void ChromeRenderMessageFilter::OnExtensionRemoveListener( + const std::string& extension_id, + const std::string& event_name) { + RenderProcessHost* process = RenderProcessHost::FromID(render_process_id_); + if (!profile_->GetExtensionEventRouter() || !process) + return; + + profile_->GetExtensionEventRouter()->RemoveEventListener( + event_name, process, extension_id); +} + +void ChromeRenderMessageFilter::OnExtensionCloseChannel(int port_id) { + if (profile_->GetExtensionMessageService()) + profile_->GetExtensionMessageService()->CloseChannel(port_id); +} + + #if defined(USE_TCMALLOC) void ChromeRenderMessageFilter::OnRendererTcmalloc(base::ProcessId pid, const std::string& output) { diff --git a/chrome/browser/renderer_host/chrome_render_message_filter.h b/chrome/browser/renderer_host/chrome_render_message_filter.h index 25a8ef8..aa06817 100644 --- a/chrome/browser/renderer_host/chrome_render_message_filter.h +++ b/chrome/browser/renderer_host/chrome_render_message_filter.h @@ -64,7 +64,6 @@ class ChromeRenderMessageFilter : public BrowserMessageFilter { int receiver_port_id, int tab_id, const std::string& extension_id, const std::string& channel_name); - void OnGetExtensionMessageBundle(const std::string& extension_id, IPC::Message* reply_msg); void OnGetExtensionMessageBundleOnFileThread( @@ -72,6 +71,11 @@ class ChromeRenderMessageFilter : public BrowserMessageFilter { const std::string& extension_id, const std::string& default_locale, IPC::Message* reply_msg); + void OnExtensionAddListener(const std::string& extension_id, + const std::string& event_name); + void OnExtensionRemoveListener(const std::string& extension_id, + const std::string& event_name); + void OnExtensionCloseChannel(int port_id); #if defined(USE_TCMALLOC) void OnRendererTcmalloc(base::ProcessId pid, const std::string& output); #endif diff --git a/content/browser/renderer_host/DEPS b/content/browser/renderer_host/DEPS index 0a9e14a..d8e9a30 100644 --- a/content/browser/renderer_host/DEPS +++ b/content/browser/renderer_host/DEPS @@ -1,5 +1,4 @@ include_rules = [ "+content/renderer", # For single-process mode. "+third_party/zlib", - "+chrome/browser/extensions", # temporarily, for BrowserRenderProcessHost ] diff --git a/content/browser/renderer_host/browser_render_process_host.cc b/content/browser/renderer_host/browser_render_process_host.cc index 25bab9c..f439717 100644 --- a/content/browser/renderer_host/browser_render_process_host.cc +++ b/content/browser/renderer_host/browser_render_process_host.cc @@ -27,28 +27,20 @@ #include "base/threading/thread.h" #include "base/threading/thread_restrictions.h" #include "chrome/browser/browser_process.h" -#include "chrome/browser/extensions/extension_event_router.h" -#include "chrome/browser/extensions/extension_function_dispatcher.h" -#include "chrome/browser/extensions/extension_message_service.h" -#include "chrome/browser/extensions/extension_service.h" -#include "chrome/browser/extensions/user_script_master.h" #include "chrome/browser/gpu_data_manager.h" #include "chrome/browser/history/history.h" #include "chrome/browser/io_thread.h" #include "chrome/browser/metrics/user_metrics.h" #include "chrome/browser/net/resolve_proxy_msg_helper.h" #include "chrome/browser/platform_util.h" +#include "chrome/browser/prefs/pref_service.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/renderer_host/web_cache_manager.h" #include "chrome/browser/safe_browsing/client_side_detection_service.h" #include "chrome/browser/spellcheck_host.h" -#include "chrome/browser/metrics/user_metrics.h" #include "chrome/browser/visitedlink/visitedlink_master.h" #include "chrome/common/chrome_paths.h" #include "chrome/common/chrome_switches.h" -#include "chrome/common/extensions/extension.h" -#include "chrome/common/extensions/extension_icon_set.h" -#include "chrome/common/extensions/extension_messages.h" #include "chrome/common/logging_chrome.h" #include "chrome/common/pref_names.h" #include "chrome/common/render_messages.h" @@ -286,12 +278,6 @@ BrowserRenderProcessHost::BrowserRenderProcessHost(Profile* profile) callback_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { widget_helper_ = new RenderWidgetHelper(); - registrar_.Add(this, NotificationType::USER_SCRIPTS_UPDATED, - Source<Profile>(profile->GetOriginalProfile())); - registrar_.Add(this, NotificationType::EXTENSION_LOADED, - Source<Profile>(profile->GetOriginalProfile())); - registrar_.Add(this, NotificationType::EXTENSION_UNLOADED, - Source<Profile>(profile->GetOriginalProfile())); registrar_.Add(this, NotificationType::SPELLCHECK_HOST_REINITIALIZED, NotificationService::AllSources()); registrar_.Add(this, NotificationType::SPELLCHECK_WORD_ADDED, @@ -815,61 +801,6 @@ void BrowserRenderProcessHost::InitVisitedLinks() { SendVisitedLinkTable(visitedlink_master->shared_memory()); } -void BrowserRenderProcessHost::InitUserScripts() { - UserScriptMaster* user_script_master = profile()->GetUserScriptMaster(); - - // Incognito profiles won't have user scripts. - if (!user_script_master) - return; - - if (!user_script_master->ScriptsReady()) { - // No scripts ready. :( - return; - } - - // Update the renderer process with the current scripts. - SendUserScriptsUpdate(user_script_master->GetSharedMemory()); -} - -void BrowserRenderProcessHost::InitExtensions() { - // Valid extension function names, used to setup bindings in renderer. - std::vector<std::string> function_names; - ExtensionFunctionDispatcher::GetAllFunctionNames(&function_names); - Send(new ExtensionMsg_SetFunctionNames(function_names)); - - // Scripting whitelist. This is modified by tests and must be communicated to - // renderers. - Send(new ExtensionMsg_SetScriptingWhitelist( - *Extension::GetScriptingWhitelist())); - - // Loaded extensions. - ExtensionService* service = profile()->GetExtensionService(); - if (service) { - for (size_t i = 0; i < service->extensions()->size(); ++i) { - Send(new ExtensionMsg_Loaded( - ExtensionMsg_Loaded_Params(service->extensions()->at(i)))); - } - } -} - -void BrowserRenderProcessHost::SendUserScriptsUpdate( - base::SharedMemory *shared_memory) { - // Process is being started asynchronously. We'll end up calling - // InitUserScripts when it's created which will call this again. - if (child_process_.get() && child_process_->IsStarting()) - return; - - base::SharedMemoryHandle handle_for_process; - if (!shared_memory->ShareToProcess(GetHandle(), &handle_for_process)) { - // This can legitimately fail if the renderer asserts at startup. - return; - } - - if (base::SharedMemory::IsHandleValid(handle_for_process)) { - Send(new ExtensionMsg_UpdateUserScripts(handle_for_process)); - } -} - bool BrowserRenderProcessHost::FastShutdownIfPossible() { if (run_renderer_in_process()) return false; // Single process mode can't do fast shutdown. @@ -1006,12 +937,7 @@ bool BrowserRenderProcessHost::OnMessageReceived(const IPC::Message& msg) { IPC_MESSAGE_HANDLER(ViewHostMsg_UpdatedCacheStats, OnUpdatedCacheStats) IPC_MESSAGE_HANDLER(ViewHostMsg_SuddenTerminationChanged, - SuddenTerminationChanged); - IPC_MESSAGE_HANDLER(ExtensionHostMsg_AddListener, OnExtensionAddListener) - IPC_MESSAGE_HANDLER(ExtensionHostMsg_RemoveListener, - OnExtensionRemoveListener) - IPC_MESSAGE_HANDLER(ExtensionHostMsg_CloseChannel, - OnExtensionCloseChannel) + SuddenTerminationChanged) IPC_MESSAGE_HANDLER(ViewHostMsg_UserMetricsRecordAction, OnUserMetricsRecordAction) IPC_MESSAGE_HANDLER(SpellCheckHostMsg_RequestDictionary, @@ -1139,24 +1065,6 @@ void BrowserRenderProcessHost::Observe(NotificationType type, const NotificationSource& source, const NotificationDetails& details) { switch (type.value) { - case NotificationType::USER_SCRIPTS_UPDATED: { - base::SharedMemory* shared_memory = - Details<base::SharedMemory>(details).ptr(); - if (shared_memory) { - SendUserScriptsUpdate(shared_memory); - } - break; - } - case NotificationType::EXTENSION_LOADED: { - Send(new ExtensionMsg_Loaded( - ExtensionMsg_Loaded_Params(Details<const Extension>(details).ptr()))); - break; - } - case NotificationType::EXTENSION_UNLOADED: { - Send(new ExtensionMsg_Unloaded( - Details<UnloadedExtensionInfo>(details).ptr()->extension->id())); - break; - } case NotificationType::SPELLCHECK_HOST_REINITIALIZED: { InitSpellChecker(); break; @@ -1187,8 +1095,6 @@ void BrowserRenderProcessHost::OnProcessLaunched() { Send(new ViewMsg_SetIsIncognitoProcess(profile()->IsOffTheRecord())); InitVisitedLinks(); - InitUserScripts(); - InitExtensions(); // We don't want to initialize the spellchecker unless SpellCheckHost has been // created. In InitSpellChecker(), we know if GetSpellCheckHost() is NULL @@ -1212,30 +1118,6 @@ void BrowserRenderProcessHost::OnProcessLaunched() { Source<RenderProcessHost>(this), NotificationService::NoDetails()); } -void BrowserRenderProcessHost::OnExtensionAddListener( - const std::string& extension_id, - const std::string& event_name) { - if (profile()->GetExtensionEventRouter()) { - profile()->GetExtensionEventRouter()->AddEventListener( - event_name, this, extension_id); - } -} - -void BrowserRenderProcessHost::OnExtensionRemoveListener( - const std::string& extension_id, - const std::string& event_name) { - if (profile()->GetExtensionEventRouter()) { - profile()->GetExtensionEventRouter()->RemoveEventListener( - event_name, this, extension_id); - } -} - -void BrowserRenderProcessHost::OnExtensionCloseChannel(int port_id) { - if (profile()->GetExtensionMessageService()) { - profile()->GetExtensionMessageService()->CloseChannel(port_id); - } -} - void BrowserRenderProcessHost::OnUserMetricsRecordAction( const std::string& action) { UserMetrics::RecordComputedAction(action, profile()); diff --git a/content/browser/renderer_host/browser_render_process_host.h b/content/browser/renderer_host/browser_render_process_host.h index 70cdf00..385625b 100644 --- a/content/browser/renderer_host/browser_render_process_host.h +++ b/content/browser/renderer_host/browser_render_process_host.h @@ -104,28 +104,12 @@ class BrowserRenderProcessHost : public RenderProcessHost, // Control message handlers. void OnUpdatedCacheStats(const WebKit::WebCache::UsageStats& stats); void SuddenTerminationChanged(bool enabled); - void OnExtensionAddListener(const std::string& extension_id, - const std::string& event_name); - void OnExtensionRemoveListener(const std::string& extension_id, - const std::string& event_name); - void OnExtensionCloseChannel(int port_id); void OnUserMetricsRecordAction(const std::string& action); // Initialize support for visited links. Send the renderer process its initial // set of visited links. void InitVisitedLinks(); - // Initialize support for user scripts. Send the renderer process its initial - // set of scripts and listen for updates to scripts. - void InitUserScripts(); - - // Initialize support for extension APIs. Send the list of registered API - // functions to thre renderer process. - void InitExtensions(); - - // Sends the renderer process a new set of user scripts. - void SendUserScriptsUpdate(base::SharedMemory* shared_memory); - // Generates a command line to be used to spawn a renderer and appends the // results to |*command_line|. void AppendRendererCommandLine(CommandLine* command_line) const; diff --git a/content/browser/tab_contents/tab_contents.cc b/content/browser/tab_contents/tab_contents.cc index 1b50925..13b0a83 100644 --- a/content/browser/tab_contents/tab_contents.cc +++ b/content/browser/tab_contents/tab_contents.cc @@ -53,9 +53,7 @@ #include "chrome/common/chrome_constants.h" #include "chrome/common/chrome_switches.h" #include "chrome/common/content_restriction.h" -#include "chrome/common/extensions/extension.h" #include "chrome/common/extensions/extension_messages.h" -#include "chrome/common/extensions/url_pattern.h" #include "chrome/common/icon_messages.h" #include "chrome/common/pref_names.h" #include "chrome/common/render_messages.h" |