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

Side by Side Diff: content/renderer/npapi/webplugin_impl.cc

Issue 736743003: Use content::Referrer to pass around referrers in the plugin code (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: updates Created 6 years, 1 month 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 unified diff | Download patch
« no previous file with comments | « content/renderer/npapi/webplugin_impl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/npapi/webplugin_impl.h" 5 #include "content/renderer/npapi/webplugin_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/debug/crash_logging.h" 9 #include "base/debug/crash_logging.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 632 matching lines...) Expand 10 before | Expand all | Expand 10 after
643 WebHTTPBody http_body; 643 WebHTTPBody http_body;
644 if (body.size()) { 644 if (body.size()) {
645 http_body.initialize(); 645 http_body.initialize();
646 http_body.appendData(WebData(&body[0], body.size())); 646 http_body.appendData(WebData(&body[0], body.size()));
647 } 647 }
648 request->setHTTPBody(http_body); 648 request->setHTTPBody(http_body);
649 649
650 return rv; 650 return rv;
651 } 651 }
652 652
653 bool WebPluginImpl::IsValidUrl(const GURL& url, Referrer referrer_flag) { 653 bool WebPluginImpl::IsValidUrl(const GURL& url, ReferrerValue referrer_flag) {
654 if (referrer_flag == PLUGIN_SRC && 654 if (referrer_flag == PLUGIN_SRC &&
655 mime_type_ == kFlashPluginSwfMimeType && 655 mime_type_ == kFlashPluginSwfMimeType &&
656 url.GetOrigin() != plugin_url_.GetOrigin()) { 656 url.GetOrigin() != plugin_url_.GetOrigin()) {
657 // Do url check to make sure that there are no @, ;, \ chars in between url 657 // Do url check to make sure that there are no @, ;, \ chars in between url
658 // scheme and url path. 658 // scheme and url path.
659 const char* url_to_check(url.spec().data()); 659 const char* url_to_check(url.spec().data());
660 url::Parsed parsed; 660 url::Parsed parsed;
661 url::ParseStandardURL(url_to_check, strlen(url_to_check), &parsed); 661 url::ParseStandardURL(url_to_check, strlen(url_to_check), &parsed);
662 if (parsed.path.begin <= parsed.scheme.end()) 662 if (parsed.path.begin <= parsed.scheme.end())
663 return true; 663 return true;
(...skipping 11 matching lines...) Expand all
675 675
676 WebPluginImpl::RoutingStatus WebPluginImpl::RouteToFrame( 676 WebPluginImpl::RoutingStatus WebPluginImpl::RouteToFrame(
677 const char* url, 677 const char* url,
678 bool is_javascript_url, 678 bool is_javascript_url,
679 bool popups_allowed, 679 bool popups_allowed,
680 const char* method, 680 const char* method,
681 const char* target, 681 const char* target,
682 const char* buf, 682 const char* buf,
683 unsigned int len, 683 unsigned int len,
684 int notify_id, 684 int notify_id,
685 Referrer referrer_flag) { 685 ReferrerValue referrer_flag) {
686 // If there is no target, there is nothing to do 686 // If there is no target, there is nothing to do
687 if (!target) 687 if (!target)
688 return NOT_ROUTED; 688 return NOT_ROUTED;
689 689
690 // This could happen if the WebPluginContainer was already deleted. 690 // This could happen if the WebPluginContainer was already deleted.
691 if (!webframe_) 691 if (!webframe_)
692 return NOT_ROUTED; 692 return NOT_ROUTED;
693 693
694 WebString target_str = WebString::fromUTF8(target); 694 WebString target_str = WebString::fromUTF8(target);
695 695
(...skipping 458 matching lines...) Expand 10 before | Expand all | Expand 10 after
1154 notify_redirects, false); 1154 notify_redirects, false);
1155 } 1155 }
1156 1156
1157 void WebPluginImpl::HandleURLRequestInternal(const char* url, 1157 void WebPluginImpl::HandleURLRequestInternal(const char* url,
1158 const char* method, 1158 const char* method,
1159 const char* target, 1159 const char* target,
1160 const char* buf, 1160 const char* buf,
1161 unsigned int len, 1161 unsigned int len,
1162 int notify_id, 1162 int notify_id,
1163 bool popups_allowed, 1163 bool popups_allowed,
1164 Referrer referrer_flag, 1164 ReferrerValue referrer_flag,
1165 bool notify_redirects, 1165 bool notify_redirects,
1166 bool is_plugin_src_load) { 1166 bool is_plugin_src_load) {
1167 // For this request, we either route the output to a frame 1167 // For this request, we either route the output to a frame
1168 // because a target has been specified, or we handle the request 1168 // because a target has been specified, or we handle the request
1169 // here, i.e. by executing the script if it is a javascript url 1169 // here, i.e. by executing the script if it is a javascript url
1170 // or by initiating a download on the URL, etc. There is one special 1170 // or by initiating a download on the URL, etc. There is one special
1171 // case in that the request is a javascript url and the target is "_self", 1171 // case in that the request is a javascript url and the target is "_self",
1172 // in which case we route the output to the plugin rather than routing it 1172 // in which case we route the output to the plugin rather than routing it
1173 // to the plugin's frame. 1173 // to the plugin's frame.
1174 bool is_javascript_url = 1174 bool is_javascript_url =
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
1226 // we want to fetch the data in the plugin process as the renderer won't be 1226 // we want to fetch the data in the plugin process as the renderer won't be
1227 // able to request any origin when site isolation is in place. So bounce 1227 // able to request any origin when site isolation is in place. So bounce
1228 // this request back to the plugin process which will use ResourceDispatcher 1228 // this request back to the plugin process which will use ResourceDispatcher
1229 // to fetch the url. 1229 // to fetch the url.
1230 1230
1231 // TODO(jam): any better way of getting this? Can't find a way to get 1231 // TODO(jam): any better way of getting this? Can't find a way to get
1232 // frame()->loader()->outgoingReferrer() which 1232 // frame()->loader()->outgoingReferrer() which
1233 // WebFrameImpl::setReferrerForRequest does. 1233 // WebFrameImpl::setReferrerForRequest does.
1234 WebURLRequest request(complete_url); 1234 WebURLRequest request(complete_url);
1235 SetReferrer(&request, referrer_flag); 1235 SetReferrer(&request, referrer_flag);
1236 GURL referrer( 1236 Referrer referrer(
1237 request.httpHeaderField(WebString::fromUTF8("Referer")).utf8()); 1237 GURL(request.httpHeaderField(WebString::fromUTF8("Referer"))),
1238 request.referrerPolicy());
1238 1239
1239 GURL first_party_for_cookies = webframe_->document().firstPartyForCookies(); 1240 GURL first_party_for_cookies = webframe_->document().firstPartyForCookies();
1240 delegate_->FetchURL(resource_id, notify_id, complete_url, 1241 delegate_->FetchURL(resource_id, notify_id, complete_url,
1241 first_party_for_cookies, method, buf, len, referrer, 1242 first_party_for_cookies, method, buf, len, referrer,
1242 notify_redirects, is_plugin_src_load, 0, 1243 notify_redirects, is_plugin_src_load, 0,
1243 render_frame_->GetRoutingID(), 1244 render_frame_->GetRoutingID(),
1244 render_view_->GetRoutingID()); 1245 render_view_->GetRoutingID());
1245 } else { 1246 } else {
1246 WebPluginResourceClient* resource_client = delegate_->CreateResourceClient( 1247 WebPluginResourceClient* resource_client = delegate_->CreateResourceClient(
1247 resource_id, complete_url, notify_id); 1248 resource_id, complete_url, notify_id);
(...skipping 14 matching lines...) Expand all
1262 return view->createUniqueIdentifierForRequest(); 1263 return view->createUniqueIdentifierForRequest();
1263 } 1264 }
1264 1265
1265 bool WebPluginImpl::InitiateHTTPRequest(unsigned long resource_id, 1266 bool WebPluginImpl::InitiateHTTPRequest(unsigned long resource_id,
1266 WebPluginResourceClient* client, 1267 WebPluginResourceClient* client,
1267 const GURL& url, 1268 const GURL& url,
1268 const char* method, 1269 const char* method,
1269 const char* buf, 1270 const char* buf,
1270 int buf_len, 1271 int buf_len,
1271 const char* range_info, 1272 const char* range_info,
1272 Referrer referrer_flag, 1273 ReferrerValue referrer_flag,
1273 bool notify_redirects, 1274 bool notify_redirects,
1274 bool is_plugin_src_load) { 1275 bool is_plugin_src_load) {
1275 if (!client) { 1276 if (!client) {
1276 NOTREACHED(); 1277 NOTREACHED();
1277 return false; 1278 return false;
1278 } 1279 }
1279 1280
1280 ClientInfo info; 1281 ClientInfo info;
1281 info.id = resource_id; 1282 info.id = resource_id;
1282 info.client = client; 1283 info.client = client;
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
1513 client_index = clients_.erase(client_index); 1514 client_index = clients_.erase(client_index);
1514 } 1515 }
1515 1516
1516 // This needs to be called now and not in the destructor since the 1517 // This needs to be called now and not in the destructor since the
1517 // webframe_ might not be valid anymore. 1518 // webframe_ might not be valid anymore.
1518 webframe_ = NULL; 1519 webframe_ = NULL;
1519 weak_factory_.InvalidateWeakPtrs(); 1520 weak_factory_.InvalidateWeakPtrs();
1520 } 1521 }
1521 1522
1522 void WebPluginImpl::SetReferrer(blink::WebURLRequest* request, 1523 void WebPluginImpl::SetReferrer(blink::WebURLRequest* request,
1523 Referrer referrer_flag) { 1524 ReferrerValue referrer_flag) {
1524 switch (referrer_flag) { 1525 switch (referrer_flag) {
1525 case DOCUMENT_URL: 1526 case DOCUMENT_URL:
1526 webframe_->setReferrerForRequest(*request, GURL()); 1527 webframe_->setReferrerForRequest(*request, GURL());
1527 break; 1528 break;
1528 1529
1529 case PLUGIN_SRC: 1530 case PLUGIN_SRC:
1530 webframe_->setReferrerForRequest(*request, plugin_url_); 1531 webframe_->setReferrerForRequest(*request, plugin_url_);
1531 break; 1532 break;
1532 1533
1533 default: 1534 default:
1534 break; 1535 break;
1535 } 1536 }
1536 } 1537 }
1537 1538
1538 } // namespace content 1539 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/npapi/webplugin_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698