diff options
author | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-24 01:09:42 +0000 |
---|---|---|
committer | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-24 01:09:42 +0000 |
commit | 7fa7dd50dd9651e17c86eab41e9e963a6ec4ecf4 (patch) | |
tree | b2a852a76a33f79fa4f9c88ce94f5a21946d0801 /content | |
parent | 6b312562569d5a1aac945e6536614fc0f19339a3 (diff) | |
download | chromium_src-7fa7dd50dd9651e17c86eab41e9e963a6ec4ecf4.zip chromium_src-7fa7dd50dd9651e17c86eab41e9e963a6ec4ecf4.tar.gz chromium_src-7fa7dd50dd9651e17c86eab41e9e963a6ec4ecf4.tar.bz2 |
Move visited link out of BrowsrProcessRenderHost.
I removed the ReceiverReady code path since ViewCreated is always called before RENDERER_PROCESS_CREATED.
Review URL: http://codereview.chromium.org/6882049
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@82805 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
7 files changed, 7 insertions, 166 deletions
diff --git a/content/browser/renderer_host/browser_render_process_host.cc b/content/browser/renderer_host/browser_render_process_host.cc index ba356bb..d796b76 100644 --- a/content/browser/renderer_host/browser_render_process_host.cc +++ b/content/browser/renderer_host/browser_render_process_host.cc @@ -38,7 +38,6 @@ #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/visitedlink/visitedlink_master.h" #include "chrome/common/chrome_paths.h" #include "chrome/common/chrome_switches.h" #include "chrome/common/logging_chrome.h" @@ -158,80 +157,6 @@ class RendererMainThread : public base::Thread { RenderProcess* render_process_; }; - -// Size of the buffer after which individual link updates deemed not warranted -// and the overall update should be used instead. -static const unsigned kVisitedLinkBufferThreshold = 50; - -// This class manages buffering and sending visited link hashes (fingerprints) -// to renderer based on widget visibility. -// As opposed to the VisitedLinkEventListener in profile.cc, which coalesces to -// reduce the rate of messages being sent to render processes, this class -// ensures that the updates occur only when explicitly requested. This is -// used by BrowserRenderProcessHost to only send Add/Reset link events to the -// renderers when their tabs are visible and the corresponding RenderViews are -// created. -class VisitedLinkUpdater { - public: - VisitedLinkUpdater() : reset_needed_(false), has_receiver_(false) {} - - // Buffers |links| to update, but doesn't actually relay them. - void AddLinks(const VisitedLinkCommon::Fingerprints& links) { - if (reset_needed_) - return; - - if (pending_.size() + links.size() > kVisitedLinkBufferThreshold) { - // Once the threshold is reached, there's no need to store pending visited - // link updates -- we opt for resetting the state for all links. - AddReset(); - return; - } - - pending_.insert(pending_.end(), links.begin(), links.end()); - } - - // Tells the updater that sending individual link updates is no longer - // necessary and the visited state for all links should be reset. - void AddReset() { - reset_needed_ = true; - pending_.clear(); - } - - // Sends visited link update messages: a list of links whose visited state - // changed or reset of visited state for all links. - void Update(IPC::Channel::Sender* sender) { - DCHECK(sender); - - if (!has_receiver_) - return; - - if (reset_needed_) { - sender->Send(new ViewMsg_VisitedLink_Reset()); - reset_needed_ = false; - return; - } - - if (pending_.empty()) - return; - - sender->Send(new ViewMsg_VisitedLink_Add(pending_)); - - pending_.clear(); - } - - // Notifies the updater that it is now safe to send visited state updates. - void ReceiverReady(IPC::Channel::Sender* sender) { - has_receiver_ = true; - // Go ahead and send whatever we already have buffered up. - Update(sender); - } - - private: - bool reset_needed_; - bool has_receiver_; - VisitedLinkCommon::Fingerprints pending_; -}; - namespace { // Helper class that we pass to ResourceMessageFilter so that it can find the @@ -285,8 +210,6 @@ BrowserRenderProcessHost::BrowserRenderProcessHost(Profile* profile) registrar_.Add(this, NotificationType::SPELLCHECK_AUTOSPELL_TOGGLED, NotificationService::AllSources()); - visited_link_updater_.reset(new VisitedLinkUpdater()); - WebCacheManager::GetInstance()->Add(id()); ChildProcessSecurityPolicy::GetInstance()->Add(id()); @@ -534,15 +457,10 @@ void BrowserRenderProcessHost::ReceivedBadMessage() { base::KillProcess(GetHandle(), ResultCodes::KILLED_BAD_MESSAGE, false); } -void BrowserRenderProcessHost::ViewCreated() { - visited_link_updater_->ReceiverReady(this); -} - void BrowserRenderProcessHost::WidgetRestored() { // Verify we were properly backgrounded. DCHECK_EQ(backgrounded_, (visible_widgets_ == 0)); visible_widgets_++; - visited_link_updater_->Update(this); SetBackgrounded(false); } @@ -560,36 +478,8 @@ void BrowserRenderProcessHost::WidgetHidden() { } } -void BrowserRenderProcessHost::SendVisitedLinkTable( - base::SharedMemory* table_memory) { - // Check if the process is still starting and we don't have a handle for it - // yet, in which case this will happen later when InitVisitedLinks is called. - if (!run_renderer_in_process() && - (!child_process_.get() || child_process_->IsStarting())) { - return; - } - - base::SharedMemoryHandle handle_for_process; - table_memory->ShareToProcess(GetHandle(), &handle_for_process); - if (base::SharedMemory::IsHandleValid(handle_for_process)) - Send(new ViewMsg_VisitedLink_NewTable(handle_for_process)); -} - -void BrowserRenderProcessHost::AddVisitedLinks( - const VisitedLinkCommon::Fingerprints& links) { - visited_link_updater_->AddLinks(links); - if (visible_widgets_ == 0) - return; - - visited_link_updater_->Update(this); -} - -void BrowserRenderProcessHost::ResetVisitedLinks() { - visited_link_updater_->AddReset(); - if (visible_widgets_ == 0) - return; - - visited_link_updater_->Update(this); +int BrowserRenderProcessHost::VisibleWidgetCount() const { + return visible_widgets_; } void BrowserRenderProcessHost::AppendRendererCommandLine( @@ -793,14 +683,6 @@ base::ProcessHandle BrowserRenderProcessHost::GetHandle() { return child_process_->GetHandle(); } -void BrowserRenderProcessHost::InitVisitedLinks() { - VisitedLinkMaster* visitedlink_master = profile()->GetVisitedLinkMaster(); - if (!visitedlink_master) - return; - - SendVisitedLinkTable(visitedlink_master->shared_memory()); -} - bool BrowserRenderProcessHost::FastShutdownIfPossible() { if (run_renderer_in_process()) return false; // Single process mode can't do fast shutdown. @@ -1094,7 +976,6 @@ void BrowserRenderProcessHost::OnProcessLaunched() { Send(new ViewMsg_SetIsIncognitoProcess(profile()->IsOffTheRecord())); - InitVisitedLinks(); // We don't want to initialize the spellchecker unless SpellCheckHost has been // created. In InitSpellChecker(), we know if GetSpellCheckHost() is NULL diff --git a/content/browser/renderer_host/browser_render_process_host.h b/content/browser/renderer_host/browser_render_process_host.h index decdaf5..37be1f1 100644 --- a/content/browser/renderer_host/browser_render_process_host.h +++ b/content/browser/renderer_host/browser_render_process_host.h @@ -26,7 +26,6 @@ class CommandLine; class RendererMainThread; class RenderWidgetHelper; -class VisitedLinkUpdater; namespace base { class SharedMemory; @@ -64,10 +63,7 @@ class BrowserRenderProcessHost : public RenderProcessHost, virtual void ReceivedBadMessage(); virtual void WidgetRestored(); virtual void WidgetHidden(); - virtual void ViewCreated(); - virtual void SendVisitedLinkTable(base::SharedMemory* table_memory); - virtual void AddVisitedLinks(const VisitedLinkCommon::Fingerprints& links); - virtual void ResetVisitedLinks(); + virtual int VisibleWidgetCount() const; virtual bool FastShutdownIfPossible(); virtual bool SendWithTimeout(IPC::Message* msg, int timeout_ms); virtual base::ProcessHandle GetHandle(); @@ -100,10 +96,6 @@ class BrowserRenderProcessHost : public RenderProcessHost, void SuddenTerminationChanged(bool enabled); void OnUserMetricsRecordAction(const std::string& action); - // Initialize support for visited links. Send the renderer process its initial - // set of visited links. - void InitVisitedLinks(); - // Generates a command line to be used to spawn a renderer and appends the // results to |*command_line|. void AppendRendererCommandLine(CommandLine* command_line) const; @@ -174,9 +166,6 @@ class BrowserRenderProcessHost : public RenderProcessHost, // Used in single-process mode. scoped_ptr<RendererMainThread> in_process_renderer_; - // Buffer visited links and send them to to renderer. - scoped_ptr<VisitedLinkUpdater> visited_link_updater_; - // True if this prcoess should have accessibility enabled; bool accessibility_enabled_; diff --git a/content/browser/renderer_host/mock_render_process_host.cc b/content/browser/renderer_host/mock_render_process_host.cc index ff179ff..104395f 100644 --- a/content/browser/renderer_host/mock_render_process_host.cc +++ b/content/browser/renderer_host/mock_render_process_host.cc @@ -56,22 +56,13 @@ void MockRenderProcessHost::WidgetRestored() { void MockRenderProcessHost::WidgetHidden() { } -void MockRenderProcessHost::ViewCreated() { +int MockRenderProcessHost::VisibleWidgetCount() const { + return 1; } void MockRenderProcessHost::AddWord(const string16& word) { } -void MockRenderProcessHost::SendVisitedLinkTable( - base::SharedMemory* table_memory) { -} - -void MockRenderProcessHost::AddVisitedLinks( - const VisitedLinkCommon::Fingerprints& links) { -} - -void MockRenderProcessHost::ResetVisitedLinks() { -} bool MockRenderProcessHost::FastShutdownIfPossible() { // We aren't actually going to do anything, but set |fast_shutdown_started_| diff --git a/content/browser/renderer_host/mock_render_process_host.h b/content/browser/renderer_host/mock_render_process_host.h index 5dc8ed4..0e7656c 100644 --- a/content/browser/renderer_host/mock_render_process_host.h +++ b/content/browser/renderer_host/mock_render_process_host.h @@ -46,12 +46,8 @@ class MockRenderProcessHost : public RenderProcessHost { virtual void ReceivedBadMessage(); virtual void WidgetRestored(); virtual void WidgetHidden(); - virtual void ViewCreated(); + virtual int VisibleWidgetCount() const; virtual void AddWord(const string16& word); - virtual void SendVisitedLinkTable(base::SharedMemory* table_memory); - virtual void AddVisitedLinks( - const VisitedLinkCommon::Fingerprints& visited_links); - virtual void ResetVisitedLinks(); virtual bool FastShutdownIfPossible(); virtual bool SendWithTimeout(IPC::Message* msg, int timeout_ms); virtual base::ProcessHandle GetHandle(); diff --git a/content/browser/renderer_host/render_process_host.h b/content/browser/renderer_host/render_process_host.h index cc37a8c..b384026 100644 --- a/content/browser/renderer_host/render_process_host.h +++ b/content/browser/renderer_host/render_process_host.h @@ -13,7 +13,6 @@ #include "base/process.h" #include "base/process_util.h" #include "base/time.h" -#include "chrome/common/visitedlink_common.h" #include "ipc/ipc_sync_channel.h" #include "ui/gfx/surface/transport_dib.h" @@ -189,20 +188,7 @@ class RenderProcessHost : public IPC::Channel::Sender, // unregister visibility. virtual void WidgetRestored() = 0; virtual void WidgetHidden() = 0; - - // Called when RenderView is created by a listener. - virtual void ViewCreated() = 0; - - // Informs the renderer about a new visited link table. - virtual void SendVisitedLinkTable(base::SharedMemory* table_memory) = 0; - - // Notify the renderer that a link was visited. - virtual void AddVisitedLinks( - const VisitedLinkCommon::Fingerprints& links) = 0; - - // Clear internal visited links buffer and ask the renderer to update link - // coloring state for all of its links. - virtual void ResetVisitedLinks() = 0; + virtual int VisibleWidgetCount() const = 0; // Try to shutdown the associated renderer process as fast as possible. // If this renderer has any RenderViews with unload handlers, then this diff --git a/content/browser/renderer_host/render_view_host.cc b/content/browser/renderer_host/render_view_host.cc index a7a0fc7..d043f7f 100644 --- a/content/browser/renderer_host/render_view_host.cc +++ b/content/browser/renderer_host/render_view_host.cc @@ -189,7 +189,6 @@ bool RenderViewHost::CreateRenderView(const string16& frame_name) { delegate_->GetRenderViewType())); // Let our delegate know that we created a RenderView. delegate_->RenderViewCreated(this); - process()->ViewCreated(); return true; } diff --git a/content/browser/renderer_host/test_render_view_host.cc b/content/browser/renderer_host/test_render_view_host.cc index 394d447..0ff0194 100644 --- a/content/browser/renderer_host/test_render_view_host.cc +++ b/content/browser/renderer_host/test_render_view_host.cc @@ -65,7 +65,6 @@ TestRenderViewHost::~TestRenderViewHost() { bool TestRenderViewHost::CreateRenderView(const string16& frame_name) { DCHECK(!render_view_created_); render_view_created_ = true; - process()->ViewCreated(); return true; } |