Index: content/browser/web_contents/web_contents_impl.cc |
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc |
index f8b723ff8395f5427612f85c26003b8a1b09951a..c79cde884e33d038de59f99aa44ec3549cf1b3e5 100644 |
--- a/content/browser/web_contents/web_contents_impl.cc |
+++ b/content/browser/web_contents/web_contents_impl.cc |
@@ -568,6 +568,16 @@ bool WebContentsImpl::OnMessageReceived(RenderViewHost* render_view_host, |
return handled; |
} |
+bool WebContentsImpl::HasValidFrameSource() { |
+ if (!render_frame_message_source_) { |
Charlie Reis
2015/01/27 23:16:17
nit: As long as we're making this a helper method,
nasko
2015/01/28 02:20:10
Done.
|
+ RecordAction(base::UserMetricsAction("BadMessageTerminate_WC")); |
+ GetRenderProcessHost()->ReceivedBadMessage(); |
+ return false; |
+ } |
+ |
+ return true; |
+} |
+ |
void WebContentsImpl::RunFileChooser( |
RenderViewHost* render_view_host, |
const FileChooserParams& params) { |
@@ -2764,11 +2774,8 @@ void WebContentsImpl::OnDidRunInsecureContent( |
} |
void WebContentsImpl::OnDocumentLoadedInFrame() { |
- if (!render_frame_message_source_) { |
- RecordAction(base::UserMetricsAction("BadMessageTerminate_WC")); |
- GetRenderProcessHost()->ReceivedBadMessage(); |
+ if (!HasValidFrameSource()) |
return; |
- } |
RenderFrameHostImpl* rfh = |
static_cast<RenderFrameHostImpl*>(render_frame_message_source_); |
@@ -2777,11 +2784,8 @@ void WebContentsImpl::OnDocumentLoadedInFrame() { |
} |
void WebContentsImpl::OnDidFinishLoad(const GURL& url) { |
- if (!render_frame_message_source_) { |
- RecordAction(base::UserMetricsAction("BadMessageTerminate_WC")); |
- GetRenderProcessHost()->ReceivedBadMessage(); |
+ if (!HasValidFrameSource()) |
return; |
- } |
GURL validated_url(url); |
RenderProcessHost* render_process_host = |
@@ -2795,6 +2799,9 @@ void WebContentsImpl::OnDidFinishLoad(const GURL& url) { |
} |
void WebContentsImpl::OnDidStartLoading(bool to_different_document) { |
+ if (!HasValidFrameSource()) |
+ return; |
+ |
RenderFrameHostImpl* rfh = |
static_cast<RenderFrameHostImpl*>(render_frame_message_source_); |
int64 render_frame_id = rfh->frame_tree_node()->frame_tree_node_id(); |
@@ -2837,6 +2844,9 @@ void WebContentsImpl::OnDidStartLoading(bool to_different_document) { |
} |
void WebContentsImpl::OnDidStopLoading() { |
+ if (!HasValidFrameSource()) |
+ return; |
+ |
RenderFrameHostImpl* rfh = |
static_cast<RenderFrameHostImpl*>(render_frame_message_source_); |
int64 render_frame_id = rfh->frame_tree_node()->frame_tree_node_id(); |
@@ -2865,6 +2875,9 @@ void WebContentsImpl::OnDidStopLoading() { |
} |
void WebContentsImpl::OnDidChangeLoadProgress(double load_progress) { |
+ if (!HasValidFrameSource()) |
+ return; |
+ |
RenderFrameHostImpl* rfh = |
static_cast<RenderFrameHostImpl*>(render_frame_message_source_); |
int64 render_frame_id = rfh->frame_tree_node()->frame_tree_node_id(); |
@@ -3001,9 +3014,9 @@ void WebContentsImpl::OnOpenColorChooser( |
int color_chooser_id, |
SkColor color, |
const std::vector<ColorSuggestion>& suggestions) { |
- // Protect against malicious renderer. See http://crbug.com/449777 |
- if (!render_frame_message_source_) |
+ if (!HasValidFrameSource()) |
return; |
+ |
ColorChooser* new_color_chooser = delegate_ ? |
delegate_->OpenColorChooser(this, color, suggestions) : |
NULL; |
@@ -4412,6 +4425,9 @@ void WebContentsImpl::OnPreferredSizeChanged(const gfx::Size& old_size) { |
void WebContentsImpl::AddMediaPlayerEntry(int64 player_cookie, |
ActiveMediaPlayerMap* player_map) { |
+ if (!HasValidFrameSource()) |
+ return; |
+ |
const uintptr_t key = |
reinterpret_cast<uintptr_t>(render_frame_message_source_); |
DCHECK(std::find((*player_map)[key].begin(), |
@@ -4422,6 +4438,9 @@ void WebContentsImpl::AddMediaPlayerEntry(int64 player_cookie, |
void WebContentsImpl::RemoveMediaPlayerEntry(int64 player_cookie, |
ActiveMediaPlayerMap* player_map) { |
+ if (!HasValidFrameSource()) |
+ return; |
+ |
const uintptr_t key = |
reinterpret_cast<uintptr_t>(render_frame_message_source_); |
ActiveMediaPlayerMap::iterator it = player_map->find(key); |