Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5595)

Unified Diff: chrome/renderer/render_view.cc

Issue 265044: Eliminate WebView::GetDelegate and replace RenderViewSet with a linked list o... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 11 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/renderer/render_view.h ('k') | chrome/renderer/render_view_visitor.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/renderer/render_view.cc
===================================================================
--- chrome/renderer/render_view.cc (revision 28382)
+++ chrome/renderer/render_view.cc (working copy)
@@ -179,10 +179,6 @@
// that variable for more.
const int kDefaultDelaySecondsForFormStateSync = 5;
-// The next available page ID to use. This ensures that the page IDs are
-// globally unique in the renderer.
-static int32 next_page_id_ = 1;
-
// The maximum number of popups that can be spawned from one page.
static const int kMaximumNumberOfUnacknowledgedPopups = 25;
@@ -201,6 +197,8 @@
///////////////////////////////////////////////////////////////////////////////
+int32 RenderView::next_page_id_ = 1;
+
RenderView::RenderView(RenderThreadBase* render_thread,
const WebPreferences& webkit_preferences)
: RenderWidget(render_thread, true),
@@ -235,11 +233,9 @@
#endif
document_tag_(0),
webkit_preferences_(webkit_preferences) {
- Singleton<RenderViewSet>()->render_view_set_.insert(this);
}
RenderView::~RenderView() {
- Singleton<RenderViewSet>()->render_view_set_.erase(this);
if (decrement_shared_popup_at_destruction_)
shared_popup_counter_->data--;
@@ -261,9 +257,30 @@
render_thread_->RemoveFilter(audio_message_filter_);
render_thread_->RemoveFilter(notification_provider_.get());
+
+#ifndef NDEBUG
+ // Make sure we are no longer referenced by the ViewMap.
+ ViewMap* views = Singleton<ViewMap>::get();
+ for (ViewMap::iterator it = views->begin(); it != views->end(); ++it)
+ DCHECK_NE(this, it->second) << "Failed to call Close?";
+#endif
}
/*static*/
+void RenderView::ForEach(RenderViewVisitor* visitor) {
+ ViewMap* views = Singleton<ViewMap>::get();
+ for (ViewMap::iterator it = views->begin(); it != views->end(); ++it)
+ visitor->Visit(it->second);
Matt Perry 2009/10/09 00:25:14 I think you want to break if this returns false?
darin (slow to review) 2009/10/09 03:52:30 Yes, thanks for catching that!
+}
+
+/*static*/
+RenderView* RenderView::FromWebView(WebView* webview) {
+ ViewMap* views = Singleton<ViewMap>::get();
+ ViewMap::iterator it = views->find(webview);
+ return it == views->end() ? NULL : it->second;
+}
+
+/*static*/
RenderView* RenderView::Create(
RenderThreadBase* render_thread,
gfx::NativeViewId parent_hwnd,
@@ -324,6 +341,7 @@
notification_provider_ = new NotificationProvider(this);
webwidget_ = WebView::Create(this);
+ Singleton<ViewMap>::get()->insert(std::make_pair(webview(), this));
webkit_preferences_.Apply(webview());
webview()->initializeMainFrame(this);
@@ -3616,6 +3634,13 @@
Send(new ViewMsg_ExecuteCodeFinished(routing_id_, request_id, true));
}
+void RenderView::Close() {
+ // We need to grab a pointer to the doomed WebView before we destroy it.
+ WebView* doomed = webview();
+ RenderWidget::Close();
+ Singleton<ViewMap>::get()->erase(doomed);
+}
+
void RenderView::DidHandleKeyEvent() {
edit_commands_.clear();
}
« no previous file with comments | « chrome/renderer/render_view.h ('k') | chrome/renderer/render_view_visitor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698