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

Unified Diff: content/browser/web_contents/web_contents_impl.cc

Issue 877203002: Add helper method to check for invalid message source. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 11 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 | « content/browser/web_contents/web_contents_impl.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
« no previous file with comments | « content/browser/web_contents/web_contents_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698