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

Unified Diff: content/renderer/render_view_impl.cc

Issue 8772041: Remove deprecated TabContentsDelegate::OpenURLFromTab variant (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 9 years 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/renderer/render_view_impl.h ('k') | content/shell/shell.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/render_view_impl.cc
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index c8d35b7ad626b7e5a8acc177c9059cb61547314c..2d683b391c0d446510b209c46f2e8f091c6dfa95 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -84,6 +84,7 @@
#include "net/base/net_errors.h"
#include "net/http/http_util.h"
#include "ppapi/c/private/ppb_flash_net_connector.h"
+#include "ppapi/proxy/ppapi_messages.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebAccessibilityObject.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebCString.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebDataSource.h"
@@ -113,6 +114,7 @@
#include "third_party/WebKit/Source/WebKit/chromium/public/WebPoint.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebRange.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebRect.h"
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebReferrerPolicy.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebScriptSource.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebSearchableFormData.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebSecurityOrigin.h"
@@ -213,6 +215,7 @@ using WebKit::WebPoint;
using WebKit::WebPopupMenuInfo;
using WebKit::WebRange;
using WebKit::WebRect;
+using WebKit::WebReferrerPolicy;
using WebKit::WebScriptSource;
using WebKit::WebSearchableFormData;
using WebKit::WebSecurityOrigin;
@@ -246,6 +249,7 @@ using content::NavigationState;
using content::RenderThread;
using content::RenderViewObserver;
using content::RenderViewVisitor;
+using content::Referrer;
using content::V8ValueConverter;
using webkit_glue::AltErrorPageResourceFetcher;
using webkit_glue::FormField;
@@ -278,6 +282,10 @@ static const float kScalingIncrement = 0.1f;
static const float kScalingIncrementForGesture = 0.01f;
+static const char* kPredefinedAllowedSocketOrigins[] = {
+ "okddffdblfhhnmhodogpojmfkjmhinfp"
+};
+
static void GetRedirectChain(WebDataSource* ds, std::vector<GURL>* result) {
WebVector<WebURL> urls;
ds->redirectChain(urls);
@@ -302,6 +310,13 @@ static bool IsReload(const ViewMsg_Navigate_Params& params) {
params.navigation_type == ViewMsg_Navigate_Type::RELOAD_IGNORING_CACHE;
}
+static WebReferrerPolicy getReferrerPolicyFromRequest(
+ const WebURLRequest& request) {
+ return request.extraData() ?
+ static_cast<RequestExtraData*>(request.extraData())->referrer_policy() :
+ WebKit::WebReferrerPolicyDefault;
+}
+
///////////////////////////////////////////////////////////////////////////////
int32 RenderViewImpl::next_page_id_ = 1;
@@ -426,6 +441,18 @@ RenderViewImpl::RenderViewImpl(
RenderThreadImpl::current()->video_capture_impl_manager());
}
+ for (size_t i = 0; i < arraysize(kPredefinedAllowedSocketOrigins); ++i)
+ allowed_socket_origins_.insert(kPredefinedAllowedSocketOrigins[i]);
+
+ std::string allowed_list =
+ command_line.GetSwitchValueASCII(switches::kAllowNaClSocketAPI);
+ if (!allowed_list.empty()) {
+ StringTokenizer t(allowed_list, ",");
+ while (t.GetNext()) {
+ allowed_socket_origins_.insert(t.token());
+ }
+ }
+
content::GetContentClient()->renderer()->RenderViewCreated(this);
}
@@ -578,6 +605,16 @@ bool RenderViewImpl::GetPluginInfo(const GURL& url,
return found;
}
+bool RenderViewImpl::CanUseSocketAPIs() {
+ WebFrame* main_frame = webview() ? webview()->mainFrame() : NULL;
+ GURL url(main_frame ? GURL(main_frame->document().url()) : GURL());
+ if (!url.is_valid())
+ return false;
+
+ return allowed_socket_origins_.find(url.host()) !=
+ allowed_socket_origins_.end();
+}
+
bool RenderViewImpl::OnMessageReceived(const IPC::Message& message) {
WebFrame* main_frame = webview() ? webview()->mainFrame() : NULL;
if (main_frame)
@@ -685,6 +722,17 @@ bool RenderViewImpl::OnMessageReceived(const IPC::Message& message) {
#if defined(ENABLE_FLAPPER_HACKS)
IPC_MESSAGE_HANDLER(PepperMsg_ConnectTcpACK, OnConnectTcpACK)
#endif
+ // TODO(dpolukhin): Move TCP/UDP to a separate message filter.
+ IPC_MESSAGE_HANDLER(PpapiMsg_PPBTCPSocket_ConnectACK,
+ OnTCPSocketConnectACK)
+ IPC_MESSAGE_HANDLER(PpapiMsg_PPBTCPSocket_SSLHandshakeACK,
+ OnTCPSocketSSLHandshakeACK)
+ IPC_MESSAGE_HANDLER(PpapiMsg_PPBTCPSocket_ReadACK, OnTCPSocketReadACK)
+ IPC_MESSAGE_HANDLER(PpapiMsg_PPBTCPSocket_WriteACK, OnTCPSocketWriteACK)
+ IPC_MESSAGE_HANDLER(PpapiMsg_PPBUDPSocket_BindACK, OnUDPSocketBindACK)
+ IPC_MESSAGE_HANDLER(PpapiMsg_PPBUDPSocket_RecvFromACK,
+ OnUDPSocketRecvFromACK)
+ IPC_MESSAGE_HANDLER(PpapiMsg_PPBUDPSocket_SendToACK, OnUDPSocketSendToACK)
#if defined(OS_MACOSX)
IPC_MESSAGE_HANDLER(ViewMsg_SetInLiveResize, OnSetInLiveResize)
#endif
@@ -770,13 +818,13 @@ void RenderViewImpl::OnNavigate(const ViewMsg_Navigate_Params& params) {
if (main_frame->isViewSourceModeEnabled())
request.setCachePolicy(WebURLRequest::ReturnCacheDataElseLoad);
- if (params.referrer.is_valid()) {
- if (!WebSecurityPolicy::shouldHideReferrer(
- params.url,
- WebString::fromUTF8(params.referrer.spec()))) {
- request.setHTTPHeaderField(WebString::fromUTF8("Referer"),
- WebString::fromUTF8(params.referrer.spec()));
- }
+ if (params.referrer.url.is_valid()) {
+ WebString referrer = WebSecurityPolicy::generateReferrerHeader(
+ params.referrer.policy,
+ params.url,
+ WebString::fromUTF8(params.referrer.url.spec()));
+ if (!referrer.isEmpty())
+ request.setHTTPHeaderField(WebString::fromUTF8("Referer"), referrer);
}
if (!params.extra_headers.empty()) {
@@ -1142,16 +1190,17 @@ void RenderViewImpl::UpdateURL(WebFrame* frame) {
// If we have a valid consumed client redirect source,
// the page contained a client redirect (meta refresh, document.loc...),
// so we set the referrer and transition to match.
- if (completed_client_redirect_src_.is_valid()) {
- DCHECK(completed_client_redirect_src_ == params.redirects[0]);
+ if (completed_client_redirect_src_.url.is_valid()) {
+ DCHECK(completed_client_redirect_src_.url == params.redirects[0]);
params.referrer = completed_client_redirect_src_;
params.transition = static_cast<content::PageTransition>(
params.transition | content::PAGE_TRANSITION_CLIENT_REDIRECT);
} else {
// Bug 654101: the referrer will be empty on https->http transitions. It
// would be nice if we could get the real referrer from somewhere.
- params.referrer = GURL(
- original_request.httpHeaderField(WebString::fromUTF8("Referer")));
+ params.referrer = Referrer(GURL(
+ original_request.httpHeaderField(WebString::fromUTF8("Referer"))),
+ getReferrerPolicyFromRequest(original_request));
}
string16 method = request.httpMethod();
@@ -1236,7 +1285,7 @@ void RenderViewImpl::UpdateSessionHistory(WebFrame* frame) {
void RenderViewImpl::OpenURL(WebFrame* frame,
const GURL& url,
- const GURL& referrer,
+ const Referrer& referrer,
WebNavigationPolicy policy) {
Send(new ViewHostMsg_OpenURL(
routing_id_,
@@ -1980,7 +2029,8 @@ void RenderViewImpl::loadURLExternally(
Send(new ViewHostMsg_DownloadUrl(routing_id_, request.url(), referrer,
suggested_name));
} else {
- OpenURL(frame, request.url(), referrer, policy);
+ OpenURL(frame, request.url(),
+ Referrer(referrer, getReferrerPolicyFromRequest(request)), policy);
}
}
@@ -2017,7 +2067,9 @@ WebNavigationPolicy RenderViewImpl::decidePolicyForNavigation(
// TODO(cevans): revisit whether this origin check is still necessary once
// crbug.com/101395 is fixed.
if (frame_url.GetOrigin() != url.GetOrigin()) {
- GURL referrer(request.httpHeaderField(WebString::fromUTF8("Referer")));
+ Referrer referrer(
+ GURL(request.httpHeaderField(WebString::fromUTF8("Referer"))),
+ getReferrerPolicyFromRequest(request));
OpenURL(frame, url, referrer, default_policy);
return WebKit::WebNavigationPolicyIgnore;
}
@@ -2028,7 +2080,9 @@ WebNavigationPolicy RenderViewImpl::decidePolicyForNavigation(
if (is_content_initiated &&
renderer_preferences_.browser_handles_top_level_requests &&
IsNonLocalTopLevelNavigation(url, frame, type)) {
- GURL referrer(request.httpHeaderField(WebString::fromUTF8("Referer")));
+ Referrer referrer(
+ GURL(request.httpHeaderField(WebString::fromUTF8("Referer"))),
+ getReferrerPolicyFromRequest(request));
// Reset these counters as the RenderView could be reused for the next
// navigation.
page_id_ = -1;
@@ -2076,8 +2130,11 @@ WebNavigationPolicy RenderViewImpl::decidePolicyForNavigation(
}
if (should_fork) {
- GURL referrer(request.httpHeaderField(WebString::fromUTF8("Referer")));
- OpenURL(frame, url, send_referrer ? referrer : GURL(), default_policy);
+ Referrer referrer(
+ GURL(request.httpHeaderField(WebString::fromUTF8("Referer"))),
+ getReferrerPolicyFromRequest(request));
+ OpenURL(
+ frame, url, send_referrer ? referrer : Referrer(), default_policy);
return WebKit::WebNavigationPolicyIgnore; // Suppress the load here.
}
}
@@ -2147,7 +2204,7 @@ WebNavigationPolicy RenderViewImpl::decidePolicyForNavigation(
if (is_fork || is_noreferrer_and_blank_target) {
// Open the URL via the browser, not via WebKit.
- OpenURL(frame, url, GURL(), default_policy);
+ OpenURL(frame, url, Referrer(), default_policy);
return WebKit::WebNavigationPolicyIgnore;
}
@@ -2245,8 +2302,12 @@ void RenderViewImpl::didCancelClientRedirect(WebFrame* frame) {
void RenderViewImpl::didCompleteClientRedirect(
WebFrame* frame, const WebURL& from) {
- if (!frame->parent())
- completed_client_redirect_src_ = from;
+ if (!frame->parent()) {
+ WebDataSource* ds = frame->provisionalDataSource();
+ CHECK(ds);
+ completed_client_redirect_src_ =
+ Referrer(from, getReferrerPolicyFromRequest(ds->request()));
+ }
FOR_EACH_OBSERVER(
RenderViewObserver, observers_, DidCompleteClientRedirect(frame, from));
}
@@ -2376,7 +2437,7 @@ void RenderViewImpl::didStartProvisionalLoad(WebFrame* frame) {
NavigationGestureUser : NavigationGestureAuto;
// Make sure redirect tracking state is clear for the new load.
- completed_client_redirect_src_ = GURL();
+ completed_client_redirect_src_ = Referrer();
} else if (frame->parent()->isLoading()) {
// Take note of AUTO_SUBFRAME loads here, so that we can know how to
// load an error page. See didFailProvisionalLoad.
@@ -2566,7 +2627,7 @@ void RenderViewImpl::didCommitProvisionalLoad(WebFrame* frame,
// If this committed load was initiated by a client redirect, we're
// at the last stop now, so clear it.
- completed_client_redirect_src_ = GURL();
+ completed_client_redirect_src_ = Referrer();
// Check whether we have new encoding name.
UpdateEncoding(frame, frame->view()->pageEncoding().utf8());
@@ -3927,6 +3988,8 @@ void RenderViewImpl::OnGetAllSavableResourceLinksForCurrentPage(
&referrers_list,
&frames_list);
+ // FIXME(rdsmith): When GetAllSavableResourceLinksForCurrentPage starts to
+ // return referrers, it should also return the referrer policies.
if (!webkit_glue::GetAllSavableResourceLinksForCurrentPage(
webview(),
page_url,
@@ -4714,6 +4777,62 @@ void RenderViewImpl::OnConnectTcpACK(
}
#endif
+void RenderViewImpl::OnTCPSocketConnectACK(
+ uint32 plugin_dispatcher_id,
+ uint32 socket_id,
+ bool succeeded,
+ const PP_NetAddress_Private& local_addr,
+ const PP_NetAddress_Private& remote_addr) {
+ pepper_delegate_.OnTCPSocketConnectACK(
+ socket_id, succeeded, local_addr, remote_addr);
+}
+
+void RenderViewImpl::OnTCPSocketSSLHandshakeACK(
+ uint32 plugin_dispatcher_id,
+ uint32 socket_id,
+ bool succeeded) {
+ pepper_delegate_.OnTCPSocketSSLHandshakeACK(socket_id, succeeded);
+}
+
+void RenderViewImpl::OnTCPSocketReadACK(uint32 plugin_dispatcher_id,
+ uint32 socket_id,
+ bool succeeded,
+ const std::string& data) {
+ pepper_delegate_.OnTCPSocketReadACK(socket_id, succeeded, data);
+}
+
+void RenderViewImpl::OnTCPSocketWriteACK(uint32 plugin_dispatcher_id,
+ uint32 socket_id,
+ bool succeeded,
+ int32_t bytes_written) {
+ pepper_delegate_.OnTCPSocketWriteACK(socket_id, succeeded, bytes_written);
+}
+
+void RenderViewImpl::OnUDPSocketBindACK(uint32 plugin_dispatcher_id,
+ uint32 socket_id,
+ bool succeeded) {
+ pepper_delegate_.OnUDPSocketBindACK(socket_id, succeeded);
+}
+
+void RenderViewImpl::OnUDPSocketRecvFromACK(
+ uint32 plugin_dispatcher_id,
+ uint32 socket_id,
+ bool succeeded,
+ const std::string& data,
+ const PP_NetAddress_Private& remote_addr) {
+ pepper_delegate_.OnUDPSocketRecvFromACK(socket_id,
+ succeeded,
+ data,
+ remote_addr);
+}
+
+void RenderViewImpl::OnUDPSocketSendToACK(uint32 plugin_dispatcher_id,
+ uint32 socket_id,
+ bool succeeded,
+ int32_t bytes_written) {
+ pepper_delegate_.OnUDPSocketSendToACK(socket_id, succeeded, bytes_written);
+}
+
void RenderViewImpl::OnContextMenuClosed(
const webkit_glue::CustomContextMenuContext& custom_context) {
if (custom_context.is_pepper_menu)
« no previous file with comments | « content/renderer/render_view_impl.h ('k') | content/shell/shell.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698