diff options
| author | thestig@chromium.org <thestig@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-07 18:33:42 +0000 |
|---|---|---|
| committer | thestig@chromium.org <thestig@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-07 18:33:42 +0000 |
| commit | d91ddfc676314764d240a9ad0da06063bb265d76 (patch) | |
| tree | a7b99767ed2180ea7367ae21b1622e83268c9a28 /content | |
| parent | 9b5c0c53fcf0947856d5973688776da5068743f7 (diff) | |
| download | chromium_src-d91ddfc676314764d240a9ad0da06063bb265d76.zip chromium_src-d91ddfc676314764d240a9ad0da06063bb265d76.tar.gz chromium_src-d91ddfc676314764d240a9ad0da06063bb265d76.tar.bz2 | |
Cleanup: Stop creating RenderViewObservers from chrome/ in RenderView.
BUG=76795
TEST=none
Review URL: http://codereview.chromium.org/6750018
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@80818 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
| -rw-r--r-- | content/content_renderer.gypi | 1 | ||||
| -rw-r--r-- | content/renderer/render_view.cc | 10 | ||||
| -rw-r--r-- | content/renderer/render_view.h | 15 | ||||
| -rw-r--r-- | content/renderer/render_view_browsertest.cc | 8 | ||||
| -rw-r--r-- | content/renderer/render_view_observer.h | 3 | ||||
| -rw-r--r-- | content/renderer/render_view_observer_tracker.h | 63 |
6 files changed, 72 insertions, 28 deletions
diff --git a/content/content_renderer.gypi b/content/content_renderer.gypi index 32c4271..f5b23a9 100644 --- a/content/content_renderer.gypi +++ b/content/content_renderer.gypi @@ -86,6 +86,7 @@ 'renderer/render_view_linux.cc', 'renderer/render_view_observer.cc', 'renderer/render_view_observer.h', + 'renderer/render_view_observer_tracker.h', 'renderer/render_view_visitor.h', 'renderer/render_widget.cc', 'renderer/render_widget.h', diff --git a/content/renderer/render_view.cc b/content/renderer/render_view.cc index f9b4e20..15aba9e 100644 --- a/content/renderer/render_view.cc +++ b/content/renderer/render_view.cc @@ -40,7 +40,6 @@ #include "chrome/renderer/external_host_bindings.h" #include "chrome/renderer/localized_error.h" #include "chrome/renderer/page_load_histograms.h" -#include "chrome/renderer/print_web_view_helper.h" #include "chrome/renderer/render_process.h" #include "chrome/renderer/render_thread.h" #include "chrome/renderer/searchbox.h" @@ -498,8 +497,6 @@ RenderView::RenderView(RenderThreadBase* render_thread, geolocation_dispatcher_(NULL), speech_input_dispatcher_(NULL), device_orientation_dispatcher_(NULL), - print_helper_(NULL), - searchbox_(NULL), spellcheck_provider_(NULL), accessibility_ack_pending_(false), p2p_socket_dispatcher_(NULL), @@ -559,9 +556,6 @@ RenderView::RenderView(RenderThreadBase* render_thread, audio_message_filter_ = new AudioMessageFilter(routing_id_); render_thread_->AddFilter(audio_message_filter_); - print_helper_ = new PrintWebViewHelper(this); - searchbox_ = new SearchBox(this); - RenderThread* current_thread = RenderThread::current(); SpellCheck* spellcheck = current_thread ? current_thread->spellchecker() : 0; spellcheck_provider_ = new SpellCheckProvider(this, spellcheck); @@ -1939,7 +1933,7 @@ webkit::ppapi::FullscreenContainer* RenderView::CreatePepperFullscreenContainer( webkit::ppapi::PluginInstance* plugin) { GURL active_url; - if(webview() && webview()->mainFrame()) + if (webview() && webview()->mainFrame()) active_url = GURL(webview()->mainFrame()->url()); RenderWidgetFullscreenPepper* widget = RenderWidgetFullscreenPepper::Create( routing_id_, render_thread_, plugin, active_url); @@ -1965,7 +1959,7 @@ void RenderView::didAddMessageToConsole( } void RenderView::printPage(WebFrame* frame) { - print_helper_->ScriptInitiatedPrint(frame); + FOR_EACH_OBSERVER(RenderViewObserver, observers_, PrintPage(frame)); } WebKit::WebNotificationPresenter* RenderView::notificationPresenter() { diff --git a/content/renderer/render_view.h b/content/renderer/render_view.h index c7bbce1..b9d5143 100644 --- a/content/renderer/render_view.h +++ b/content/renderer/render_view.h @@ -54,10 +54,7 @@ #endif class AudioMessageFilter; -class BlockedPlugin; class DeviceOrientationDispatcher; -class DevToolsAgent; -class DevToolsClient; class DomAutomationController; class ExternalHostBindings; class ExternalPopupMenu; @@ -72,7 +69,6 @@ class PepperDeviceTest; class PrintWebViewHelper; class RenderViewObserver; class RenderViewVisitor; -class SearchBox; class SkBitmap; class SpeechInputDispatcher; class SpellCheckProvider; @@ -244,8 +240,6 @@ class RenderView : public RenderWidget, disable_scrollbars_size_limit_.height() <= height)); } - SearchBox* searchbox() const { return searchbox_; } - const WebKit::WebNode& context_menu_node() { return context_menu_node_; } // Current P2PSocketDispatcher. Set to NULL if P2P API is disabled. @@ -638,7 +632,6 @@ class RenderView : public RenderWidget, FRIEND_TEST_ALL_PREFIXES(ExternalPopupMenuRemoveTest, RemoveOnChange); FRIEND_TEST_ALL_PREFIXES(ExternalPopupMenuTest, NormalCase); FRIEND_TEST_ALL_PREFIXES(ExternalPopupMenuTest, ShowPopupThenNavigate); - FRIEND_TEST_ALL_PREFIXES(RenderViewTest, BlockScriptInitiatedPrinting); FRIEND_TEST_ALL_PREFIXES(RenderViewTest, ImeComposition); FRIEND_TEST_ALL_PREFIXES(RenderViewTest, InsertCharacters); FRIEND_TEST_ALL_PREFIXES(RenderViewTest, JSBlockSentAfterPageLoad); @@ -646,10 +639,7 @@ class RenderView : public RenderWidget, FRIEND_TEST_ALL_PREFIXES(RenderViewTest, OnHandleKeyboardEvent); FRIEND_TEST_ALL_PREFIXES(RenderViewTest, OnImeStateChanged); FRIEND_TEST_ALL_PREFIXES(RenderViewTest, OnNavStateChanged); - FRIEND_TEST_ALL_PREFIXES(RenderViewTest, OnPrintPages); FRIEND_TEST_ALL_PREFIXES(RenderViewTest, OnSetTextDirection); - FRIEND_TEST_ALL_PREFIXES(RenderViewTest, PrintLayoutTest); - FRIEND_TEST_ALL_PREFIXES(RenderViewTest, PrintWithIframe); FRIEND_TEST_ALL_PREFIXES(RenderViewTest, UpdateTargetURLWithInvalidURL); #if defined(OS_MACOSX) FRIEND_TEST_ALL_PREFIXES(RenderViewTest, MacTestCmdUp); @@ -1237,11 +1227,6 @@ class RenderView : public RenderWidget, // Device orientation dispatcher attached to this view; lazily initialized. DeviceOrientationDispatcher* device_orientation_dispatcher_; - // PrintWebViewHelper handles printing - PrintWebViewHelper* print_helper_; - - SearchBox* searchbox_; - // spellcheck provider which is registered as a view observer. SpellCheckProvider* spellcheck_provider_; diff --git a/content/renderer/render_view_browsertest.cc b/content/renderer/render_view_browsertest.cc index 96cd1d2..93925c4 100644 --- a/content/renderer/render_view_browsertest.cc +++ b/content/renderer/render_view_browsertest.cc @@ -400,7 +400,7 @@ TEST_F(RenderViewTest, OnSetTextDirection) { TEST_F(RenderViewTest, OnPrintPages) { // Lets simulate a print pages with Hello world. LoadHTML("<body><p>Hello World!</p></body>"); - view_->print_helper_->OnPrintPages(); + PrintWebViewHelper::Get(view_)->OnPrintPages(); VerifyPageCount(1); VerifyPagesPrinted(true); @@ -432,7 +432,7 @@ TEST_F(RenderViewTest, BlockScriptInitiatedPrinting) { VerifyPagesPrinted(false); // Unblock script initiated printing and verify printing works. - view_->print_helper_->ResetScriptedPrintCount(); + PrintWebViewHelper::Get(view_)->ResetScriptedPrintCount(); render_thread_.printer()->ResetPrinter(); LoadHTML(kPrintWithJSHTML); VerifyPageCount(1); @@ -466,7 +466,7 @@ TEST_F(RenderViewTest, PrintWithIframe) { view_->webview()->mainFrame()); // Initiate printing. - view_->print_helper_->OnPrintPages(); + PrintWebViewHelper::Get(view_)->OnPrintPages(); // Verify output through MockPrinter. const MockPrinter* printer(render_thread_.printer()); @@ -530,7 +530,7 @@ TEST_F(RenderViewTest, PrintLayoutTest) { for (size_t i = 0; i < arraysize(kTestPages); ++i) { // Load an HTML page and print it. LoadHTML(kTestPages[i].page); - view_->print_helper_->OnPrintPages(); + PrintWebViewHelper::Get(view_)->OnPrintPages(); // MockRenderThread::Send() just calls MockRenderThread::OnMsgReceived(). // So, all IPC messages sent in the above RenderView::OnPrintPages() call diff --git a/content/renderer/render_view_observer.h b/content/renderer/render_view_observer.h index d503b4e..f82fc17 100644 --- a/content/renderer/render_view_observer.h +++ b/content/renderer/render_view_observer.h @@ -45,6 +45,7 @@ class RenderViewObserver : public IPC::Channel::Listener, const WebKit::WebFormElement& form) {} virtual void DidCreateDataSource(WebKit::WebFrame* frame, WebKit::WebDataSource* ds) {} + virtual void PrintPage(WebKit::WebFrame* frame) {} // These match the RenderView methods below. virtual void FrameTranslated(WebKit::WebFrame* frame) {} @@ -53,7 +54,7 @@ class RenderViewObserver : public IPC::Channel::Listener, bool preliminary_capture) {} protected: - RenderViewObserver(RenderView* render_view); + explicit RenderViewObserver(RenderView* render_view); virtual ~RenderViewObserver(); // IPC::Channel::Listener implementation. diff --git a/content/renderer/render_view_observer_tracker.h b/content/renderer/render_view_observer_tracker.h new file mode 100644 index 0000000..1a9258a --- /dev/null +++ b/content/renderer/render_view_observer_tracker.h @@ -0,0 +1,63 @@ +// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Helper class used to find the RenderViewObservers for a given RenderView. +// +// Example usage: +// +// class MyRVO : public RenderViewObserver, +// public RenderViewObserverTracker<MyRVO> { +// ... +// }; +// +// MyRVO::MyRVO(RenderView* render_view) +// : RenderViewObserver(render_view), +// RenderViewObserverTracker<SearchBox>(render_view) { +// ... +// } +// +// void SomeFunction(RenderView* rv) { +// MyRVO* my_rvo = new MyRVO(rv); +// MyRVO* my_rvo_tracked = MyRVO::Get(rv); +// // my_rvo == my_rvo_tracked +// } + +#ifndef CONTENT_RENDERER_RENDER_VIEW_OBSERVER_TRACKER_H_ +#define CONTENT_RENDERER_RENDER_VIEW_OBSERVER_TRACKER_H_ +#pragma once + +#include <map> + +#include "base/lazy_instance.h" + +class RenderView; + +template <class T> +class RenderViewObserverTracker { + public: + static T* Get(RenderView* render_view) { + return render_view_map_.Get()[render_view]; + } + + explicit RenderViewObserverTracker(RenderView* render_view) + : render_view_(render_view) { + render_view_map_.Get()[render_view] = static_cast<T*>(this); + } + ~RenderViewObserverTracker() { + render_view_map_.Get().erase(render_view_); + } + + private: + RenderView* render_view_; + + static base::LazyInstance<std::map<RenderView*, T*> > render_view_map_; + + DISALLOW_COPY_AND_ASSIGN(RenderViewObserverTracker<T>); +}; + +template <class T> +base::LazyInstance<std::map<RenderView*, T*> > + RenderViewObserverTracker<T>::render_view_map_(base::LINKER_INITIALIZED); + +#endif // CONTENT_RENDERER_RENDER_VIEW_OBSERVER_TRACKER_H_ |
