summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authorthestig@chromium.org <thestig@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-07 18:33:42 +0000
committerthestig@chromium.org <thestig@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-07 18:33:42 +0000
commitd91ddfc676314764d240a9ad0da06063bb265d76 (patch)
treea7b99767ed2180ea7367ae21b1622e83268c9a28 /content
parent9b5c0c53fcf0947856d5973688776da5068743f7 (diff)
downloadchromium_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.gypi1
-rw-r--r--content/renderer/render_view.cc10
-rw-r--r--content/renderer/render_view.h15
-rw-r--r--content/renderer/render_view_browsertest.cc8
-rw-r--r--content/renderer/render_view_observer.h3
-rw-r--r--content/renderer/render_view_observer_tracker.h63
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_