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

Side by Side Diff: content/renderer/render_view_impl.cc

Issue 11193051: To fix the cross-site post submission bug. Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: New OpenURL function and DataType Test Created 8 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 | Annotate | Revision Log
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/render_view_impl.h" 5 #include "content/renderer/render_view_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
178 #include "ui/gfx/point.h" 178 #include "ui/gfx/point.h"
179 #include "ui/gfx/rect.h" 179 #include "ui/gfx/rect.h"
180 #include "ui/gfx/size_conversions.h" 180 #include "ui/gfx/size_conversions.h"
181 #include "v8/include/v8.h" 181 #include "v8/include/v8.h"
182 #include "webkit/appcache/web_application_cache_host_impl.h" 182 #include "webkit/appcache/web_application_cache_host_impl.h"
183 #include "webkit/base/file_path_string_conversions.h" 183 #include "webkit/base/file_path_string_conversions.h"
184 #include "webkit/dom_storage/dom_storage_types.h" 184 #include "webkit/dom_storage/dom_storage_types.h"
185 #include "webkit/glue/alt_error_page_resource_fetcher.h" 185 #include "webkit/glue/alt_error_page_resource_fetcher.h"
186 #include "webkit/glue/dom_operations.h" 186 #include "webkit/glue/dom_operations.h"
187 #include "webkit/glue/glue_serialize.h" 187 #include "webkit/glue/glue_serialize.h"
188 #include "webkit/glue/resource_request_body.h"
188 #include "webkit/glue/web_intent_service_data.h" 189 #include "webkit/glue/web_intent_service_data.h"
189 #include "webkit/glue/webdropdata.h" 190 #include "webkit/glue/webdropdata.h"
190 #include "webkit/glue/webkit_constants.h" 191 #include "webkit/glue/webkit_constants.h"
191 #include "webkit/glue/webkit_glue.h" 192 #include "webkit/glue/webkit_glue.h"
192 #include "webkit/glue/weburlresponse_extradata_impl.h" 193 #include "webkit/glue/weburlresponse_extradata_impl.h"
193 #include "webkit/gpu/webgraphicscontext3d_in_process_impl.h" 194 #include "webkit/gpu/webgraphicscontext3d_in_process_impl.h"
194 #include "webkit/media/webmediaplayer_impl.h" 195 #include "webkit/media/webmediaplayer_impl.h"
195 #include "webkit/media/webmediaplayer_ms.h" 196 #include "webkit/media/webmediaplayer_ms.h"
196 #include "webkit/plugins/npapi/plugin_list.h" 197 #include "webkit/plugins/npapi/plugin_list.h"
197 #include "webkit/plugins/npapi/webplugin_delegate.h" 198 #include "webkit/plugins/npapi/webplugin_delegate.h"
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
313 using WebKit::WebVector; 314 using WebKit::WebVector;
314 using WebKit::WebView; 315 using WebKit::WebView;
315 using WebKit::WebWidget; 316 using WebKit::WebWidget;
316 using WebKit::WebWindowFeatures; 317 using WebKit::WebWindowFeatures;
317 using appcache::WebApplicationCacheHostImpl; 318 using appcache::WebApplicationCacheHostImpl;
318 using base::Time; 319 using base::Time;
319 using base::TimeDelta; 320 using base::TimeDelta;
320 321
321 using webkit_glue::AltErrorPageResourceFetcher; 322 using webkit_glue::AltErrorPageResourceFetcher;
322 using webkit_glue::ResourceFetcher; 323 using webkit_glue::ResourceFetcher;
324 using webkit_glue::ResourceRequestBody;
323 using webkit_glue::WebPreferences; 325 using webkit_glue::WebPreferences;
324 using webkit_glue::WebURLResponseExtraDataImpl; 326 using webkit_glue::WebURLResponseExtraDataImpl;
325 327
326 #if defined(OS_ANDROID) 328 #if defined(OS_ANDROID)
327 using WebKit::WebContentDetectionResult; 329 using WebKit::WebContentDetectionResult;
328 using WebKit::WebFloatPoint; 330 using WebKit::WebFloatPoint;
329 using WebKit::WebFloatRect; 331 using WebKit::WebFloatRect;
330 using WebKit::WebHitTestResult; 332 using WebKit::WebHitTestResult;
331 #endif 333 #endif
332 334
(...skipping 793 matching lines...) Expand 10 before | Expand all | Expand 10 after
1126 1128
1127 if (!params.extra_headers.empty()) { 1129 if (!params.extra_headers.empty()) {
1128 for (net::HttpUtil::HeadersIterator i(params.extra_headers.begin(), 1130 for (net::HttpUtil::HeadersIterator i(params.extra_headers.begin(),
1129 params.extra_headers.end(), "\n"); 1131 params.extra_headers.end(), "\n");
1130 i.GetNext(); ) { 1132 i.GetNext(); ) {
1131 request.addHTTPHeaderField(WebString::fromUTF8(i.name()), 1133 request.addHTTPHeaderField(WebString::fromUTF8(i.name()),
1132 WebString::fromUTF8(i.values())); 1134 WebString::fromUTF8(i.values()));
1133 } 1135 }
1134 } 1136 }
1135 1137
1136 if (params.is_post) { 1138 if(params.is_post) {
1137 request.setHTTPMethod(WebString::fromUTF8("POST"));
1138
1139 // Set post data.
1140 WebHTTPBody http_body; 1139 WebHTTPBody http_body;
1141 http_body.initialize(); 1140 http_body.initialize();
1142 http_body.appendData(WebData( 1141 const std::vector<ResourceRequestBody::Element>* uploads =
1143 reinterpret_cast<const char*>( 1142 params.browser_initiated_post_data->elements();
1144 &params.browser_initiated_post_data.front()), 1143 std::vector<ResourceRequestBody::Element>::const_iterator iter;
1145 params.browser_initiated_post_data.size())); 1144 for (iter = uploads->begin(); iter != uploads->end(); ++iter) {
1145 switch (iter->type()) {
1146 case ResourceRequestBody::Element::TYPE_BYTES: {
1147 http_body.appendData(WebData(iter->bytes(),
1148 static_cast<int>(iter->length())));
1149 break;
1150 }
1151 case ResourceRequestBody::Element::TYPE_FILE: {
1152 http_body.appendFileRange(
1153 WebString::fromUTF8(iter->path().value()),
1154 static_cast<long long>(iter->offset()),
1155 static_cast<long long>(iter->length()),
1156 iter->expected_modification_time().ToDoubleT());
1157 break;
1158 }
1159 case ResourceRequestBody::Element::TYPE_FILE_FILESYSTEM: {
1160 CHECK(false);
1161 break;
1162 }
1163 case ResourceRequestBody::Element:: TYPE_BLOB: {
1164 CHECK(false);
1165 break;
1166 }
1167 default:
1168 NOTREACHED();
1169 }
1170 }
1146 request.setHTTPBody(http_body); 1171 request.setHTTPBody(http_body);
1172 request.setHTTPMethod(WebString::fromUTF8("POST"));
1173 request.setHTTPHeaderField(
1174 WebString::fromUTF8("Content-Type"),
1175 WebString::fromUTF8(params.extra_headers));
1147 } 1176 }
1148
1149 main_frame->loadRequest(request); 1177 main_frame->loadRequest(request);
1150 } 1178 }
1151
1152 // In case LoadRequest failed before DidCreateDataSource was called. 1179 // In case LoadRequest failed before DidCreateDataSource was called.
1153 pending_navigation_params_.reset(); 1180 pending_navigation_params_.reset();
1154 } 1181 }
1155 1182
1156 bool RenderViewImpl::IsBackForwardToStaleEntry( 1183 bool RenderViewImpl::IsBackForwardToStaleEntry(
1157 const ViewMsg_Navigate_Params& params, 1184 const ViewMsg_Navigate_Params& params,
1158 bool is_reload) { 1185 bool is_reload) {
1159 // Make sure this isn't a back/forward to an entry we have already cropped 1186 // Make sure this isn't a back/forward to an entry we have already cropped
1160 // or replaced from our history, before the browser knew about it. If so, 1187 // or replaced from our history, before the browser knew about it. If so,
1161 // a new navigation has committed in the mean time, and we can ignore this. 1188 // a new navigation has committed in the mean time, and we can ignore this.
(...skipping 487 matching lines...) Expand 10 before | Expand all | Expand 10 after
1649 if (item.urlString() == WebString::fromUTF8(kSwappedOutURL)) 1676 if (item.urlString() == WebString::fromUTF8(kSwappedOutURL))
1650 return; 1677 return;
1651 1678
1652 Send(new ViewHostMsg_UpdateState( 1679 Send(new ViewHostMsg_UpdateState(
1653 routing_id_, page_id_, webkit_glue::HistoryItemToString(item))); 1680 routing_id_, page_id_, webkit_glue::HistoryItemToString(item)));
1654 } 1681 }
1655 1682
1656 void RenderViewImpl::OpenURL(WebFrame* frame, 1683 void RenderViewImpl::OpenURL(WebFrame* frame,
1657 const GURL& url, 1684 const GURL& url,
1658 const Referrer& referrer, 1685 const Referrer& referrer,
1659 WebNavigationPolicy policy) { 1686 WebNavigationPolicy policy,
1660 Send(new ViewHostMsg_OpenURL( 1687 std::string extra_header,
1661 routing_id_, 1688 scoped_refptr<ResourceRequestBody>
1662 url, 1689 request_body) {
1663 referrer, 1690 ViewHostMsg_OpenURL_Params params;
1664 NavigationPolicyToDisposition(policy), 1691 params.url = url;
1665 frame->identifier())); 1692 params.referrer = referrer;
1693 params.disposition = NavigationPolicyToDisposition(policy);
1694 params.frame_id = frame->identifier();
1695 params.extra_header = extra_header;
1696 params.request_body = request_body;
1697 Send(new ViewHostMsg_OpenURL(routing_id_, params));
1666 } 1698 }
1667 1699
1668 // WebViewDelegate ------------------------------------------------------------ 1700 // WebViewDelegate ------------------------------------------------------------
1669 1701
1670 void RenderViewImpl::LoadNavigationErrorPage( 1702 void RenderViewImpl::LoadNavigationErrorPage(
1671 WebFrame* frame, 1703 WebFrame* frame,
1672 const WebURLRequest& failed_request, 1704 const WebURLRequest& failed_request,
1673 const WebURLError& error, 1705 const WebURLError& error,
1674 const std::string& html, 1706 const std::string& html,
1675 bool replace) { 1707 bool replace) {
(...skipping 985 matching lines...) Expand 10 before | Expand all | Expand 10 after
2661 WebFrame* frame, const WebURLRequest& request, 2693 WebFrame* frame, const WebURLRequest& request,
2662 WebNavigationPolicy policy, 2694 WebNavigationPolicy policy,
2663 const WebString& suggested_name) { 2695 const WebString& suggested_name) {
2664 Referrer referrer( 2696 Referrer referrer(
2665 GURL(request.httpHeaderField(WebString::fromUTF8("Referer"))), 2697 GURL(request.httpHeaderField(WebString::fromUTF8("Referer"))),
2666 GetReferrerPolicyFromRequest(frame, request)); 2698 GetReferrerPolicyFromRequest(frame, request));
2667 if (policy == WebKit::WebNavigationPolicyDownload) { 2699 if (policy == WebKit::WebNavigationPolicyDownload) {
2668 Send(new ViewHostMsg_DownloadUrl(routing_id_, request.url(), referrer, 2700 Send(new ViewHostMsg_DownloadUrl(routing_id_, request.url(), referrer,
2669 suggested_name)); 2701 suggested_name));
2670 } else { 2702 } else {
2671 OpenURL(frame, request.url(), referrer, policy); 2703 OpenURL(frame, request.url(), referrer, policy, std::string(""), NULL);
2672 } 2704 }
2673 } 2705 }
2674 2706
2675 WebNavigationPolicy RenderViewImpl::decidePolicyForNavigation( 2707 WebNavigationPolicy RenderViewImpl::decidePolicyForNavigation(
2676 WebFrame* frame, const WebURLRequest& request, WebNavigationType type, 2708 WebFrame* frame, const WebURLRequest& request, WebNavigationType type,
2677 const WebNode&, WebNavigationPolicy default_policy, bool is_redirect) { 2709 const WebNode&, WebNavigationPolicy default_policy, bool is_redirect) {
2678 Referrer referrer( 2710 Referrer referrer(
2679 GURL(request.httpHeaderField(WebString::fromUTF8("Referer"))), 2711 GURL(request.httpHeaderField(WebString::fromUTF8("Referer"))),
2680 GetReferrerPolicyFromRequest(frame, request)); 2712 GetReferrerPolicyFromRequest(frame, request));
2681 2713
2682 if (is_swapped_out_) { 2714 if (is_swapped_out_) {
2683 if (request.url() != GURL(kSwappedOutURL)) { 2715 if (request.url() != GURL(kSwappedOutURL)) {
2684 // Targeted links may try to navigate a swapped out frame. Allow the 2716 // Targeted links may try to navigate a swapped out frame. Allow the
2685 // browser process to navigate the tab instead. Note that it is also 2717 // browser process to navigate the tab instead. Note that it is also
2686 // possible for non-targeted navigations (from this view) to arrive 2718 // possible for non-targeted navigations (from this view) to arrive
2687 // here just after we are swapped out. It's ok to send them to the 2719 // here just after we are swapped out. It's ok to send them to the
2688 // browser, as long as they're for the top level frame. 2720 // browser, as long as they're for the top level frame.
2689 // TODO(creis): Ensure this supports targeted form submissions when 2721 // TODO(creis): Ensure this supports targeted form submissions when
2690 // fixing http://crbug.com/101395. 2722 // fixing http://crbug.com/101395.
2691 if (frame->parent() == NULL) { 2723 if (frame->parent() == NULL) {
2692 OpenURL(frame, request.url(), referrer, default_policy); 2724 OpenURL(frame, request.url(), referrer,
2725 default_policy, std::string(""), NULL);
2693 return WebKit::WebNavigationPolicyIgnore; // Suppress the load here. 2726 return WebKit::WebNavigationPolicyIgnore; // Suppress the load here.
2694 } 2727 }
2695
2696 // We should otherwise ignore in-process iframe navigations, if they 2728 // We should otherwise ignore in-process iframe navigations, if they
2697 // arrive just after we are swapped out. 2729 // arrive just after we are swapped out.
2698 return WebKit::WebNavigationPolicyIgnore; 2730 return WebKit::WebNavigationPolicyIgnore;
2699 } 2731 }
2700 2732
2701 // Allow kSwappedOutURL to complete. 2733 // Allow kSwappedOutURL to complete.
2702 return default_policy; 2734 return default_policy;
2703 } 2735 }
2704 2736
2705 // Webkit is asking whether to navigate to a new URL. 2737 // Webkit is asking whether to navigate to a new URL.
(...skipping 15 matching lines...) Expand all
2721 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); 2753 const CommandLine& command_line = *CommandLine::ForCurrentProcess();
2722 if (command_line.HasSwitch(switches::kEnableStrictSiteIsolation) && 2754 if (command_line.HasSwitch(switches::kEnableStrictSiteIsolation) &&
2723 !frame->parent() && (is_content_initiated || is_redirect)) { 2755 !frame->parent() && (is_content_initiated || is_redirect)) {
2724 WebString origin_str = frame->document().securityOrigin().toString(); 2756 WebString origin_str = frame->document().securityOrigin().toString();
2725 GURL frame_url(origin_str.utf8().data()); 2757 GURL frame_url(origin_str.utf8().data());
2726 // TODO(cevans): revisit whether this site check is still necessary once 2758 // TODO(cevans): revisit whether this site check is still necessary once
2727 // crbug.com/101395 is fixed. 2759 // crbug.com/101395 is fixed.
2728 if (!net::RegistryControlledDomainService::SameDomainOrHost(frame_url, 2760 if (!net::RegistryControlledDomainService::SameDomainOrHost(frame_url,
2729 url) || 2761 url) ||
2730 frame_url.scheme() != url.scheme()) { 2762 frame_url.scheme() != url.scheme()) {
2731 OpenURL(frame, url, referrer, default_policy); 2763 WebString method = request.httpMethod();
2764 if(method != WebString("POST")) {
2765 OpenURL(frame, url, referrer, default_policy, std::string(""), NULL);
2766 } else {
2767 scoped_refptr<ResourceRequestBody> request_body =
2768 new ResourceRequestBody();
2769 WebHTTPBody body = request.httpBody();
2770 if (!body.isNull()) {
2771 WebKit::WebHTTPBody::Element element;
2772 for (int i=0; body.elementAt(i, element); i++) {
2773 switch (element.type) {
2774 case WebHTTPBody::Element::TypeData:
2775 if (!element.data.isEmpty())
2776 request_body->AppendBytes(
2777 element.data.data(),
2778 static_cast<int>(element.data.size()));
2779 break;
2780 case WebHTTPBody::Element::TypeFile: {
2781 if (element.fileLength == -1) {
2782 request_body->AppendFileRange(
2783 FilePath(element.filePath.utf8()),
2784 0, kuint64max, base::Time());
2785 } else {
2786 request_body->AppendFileRange(
2787 FilePath(element.filePath.utf8()),
irobert 2012/11/09 19:07:57 This statement cannot be built on windows but is o
2788 static_cast<uint64>(element.fileStart),
2789 static_cast<uint64>(element.fileLength),
2790 base::Time::FromDoubleT(element.modificationTime));
2791 }
2792 break;
2793 }
2794 case WebHTTPBody::Element::TypeURL: {
2795 CHECK(false);
2796 break;
2797 }
2798 case WebHTTPBody::Element::TypeBlob: {
2799 CHECK(false);
2800 break;
2801 }
2802 default:
2803 NOTREACHED();
2804 }
2805 }
2806 }
2807
2808 // Extract Header Info.
2809 WebString ContentType =
2810 request.httpHeaderField(WebString::fromUTF8("Content-Type"));
2811 std::string header(ContentType.utf8().data(),
2812 ContentType.utf8().length());
2813
2814 OpenURL(frame, url, referrer, default_policy, header, request_body);
2815 }
2732 return WebKit::WebNavigationPolicyIgnore; 2816 return WebKit::WebNavigationPolicyIgnore;
2733 } 2817 }
2734 } 2818 }
2735 2819
2736 // If the browser is interested, then give it a chance to look at the request. 2820 // If the browser is interested, then give it a chance to look at the request.
2737 if (is_content_initiated) { 2821 if (is_content_initiated) {
2738 bool browser_handles_request = 2822 bool browser_handles_request =
2739 renderer_preferences_.browser_handles_non_local_top_level_requests && 2823 renderer_preferences_.browser_handles_non_local_top_level_requests &&
2740 IsNonLocalTopLevelNavigation(url, frame, type); 2824 IsNonLocalTopLevelNavigation(url, frame, type);
2741 if (!browser_handles_request) { 2825 if (!browser_handles_request) {
2742 browser_handles_request = 2826 browser_handles_request =
2743 renderer_preferences_.browser_handles_all_top_level_requests && 2827 renderer_preferences_.browser_handles_all_top_level_requests &&
2744 IsTopLevelNavigation(frame); 2828 IsTopLevelNavigation(frame);
2745 } 2829 }
2746 2830
2747 if (browser_handles_request) { 2831 if (browser_handles_request) {
2748 // Reset these counters as the RenderView could be reused for the next 2832 // Reset these counters as the RenderView could be reused for the next
2749 // navigation. 2833 // navigation.
2750 page_id_ = -1; 2834 page_id_ = -1;
2751 last_page_id_sent_to_browser_ = -1; 2835 last_page_id_sent_to_browser_ = -1;
2752 OpenURL(frame, url, referrer, default_policy); 2836 OpenURL(frame, url, referrer, default_policy, std::string(""), NULL);
2753 return WebKit::WebNavigationPolicyIgnore; // Suppress the load here. 2837 return WebKit::WebNavigationPolicyIgnore; // Suppress the load here.
2754 } 2838 }
2755 } 2839 }
2756 2840
2757 // Use the frame's original request's URL rather than the document's URL for 2841 // Use the frame's original request's URL rather than the document's URL for
2758 // subsequent checks. For a popup, the document's URL may become the opener 2842 // subsequent checks. For a popup, the document's URL may become the opener
2759 // window's URL if the opener has called document.write(). 2843 // window's URL if the opener has called document.write().
2760 // See http://crbug.com/93517. 2844 // See http://crbug.com/93517.
2761 GURL old_url(frame->dataSource()->request().url()); 2845 GURL old_url(frame->dataSource()->request().url());
2762 2846
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
2802 DCHECK(!source_url.is_empty()); 2886 DCHECK(!source_url.is_empty());
2803 should_fork = !source_url.SchemeIs(chrome::kFileScheme); 2887 should_fork = !source_url.SchemeIs(chrome::kFileScheme);
2804 } 2888 }
2805 2889
2806 if (!should_fork) { 2890 if (!should_fork) {
2807 // Give the embedder a chance. 2891 // Give the embedder a chance.
2808 // For now, we skip this for POST submissions. This is because 2892 // For now, we skip this for POST submissions. This is because
2809 // http://crbug.com/101395 is more likely to cause compatibility issues 2893 // http://crbug.com/101395 is more likely to cause compatibility issues
2810 // with hosted apps and extensions than WebUI pages. We will remove this 2894 // with hosted apps and extensions than WebUI pages. We will remove this
2811 // check when cross-process POST submissions are supported. 2895 // check when cross-process POST submissions are supported.
2812 if (request.httpMethod() == "GET") {
2813 should_fork = GetContentClient()->renderer()->ShouldFork( 2896 should_fork = GetContentClient()->renderer()->ShouldFork(
2814 frame, url, is_initial_navigation, &send_referrer); 2897 frame, url, is_initial_navigation, &send_referrer);
2815 }
2816 } 2898 }
2817 2899
2818 if (should_fork) { 2900 if (should_fork) {
2819 OpenURL( 2901 if (request.httpMethod() == "GET") {
2820 frame, url, send_referrer ? referrer : Referrer(), default_policy); 2902 OpenURL(frame, url,
2903 send_referrer ? referrer : Referrer(),
2904 default_policy, std::string(""), NULL);
2905 }
2906 else if (request.httpMethod() == "POST") {
2907 // Identical with the case when strict site-isolation is enabled.
2908 // We should find a way to use one copy.
2909 scoped_refptr<ResourceRequestBody> request_body =
2910 new ResourceRequestBody();
2911 WebHTTPBody body = request.httpBody();
2912 if (!body.isNull()) {
2913 WebKit::WebHTTPBody::Element element;
2914 for (int i=0; body.elementAt(i, element); i++) {
2915 switch (element.type) {
2916 case WebHTTPBody::Element::TypeData:
2917 if (!element.data.isEmpty())
2918 request_body->AppendBytes(
2919 element.data.data(),
2920 static_cast<int>(element.data.size()));
2921 break;
2922 case WebHTTPBody::Element::TypeFile: {
2923 if (element.fileLength == -1) {
2924 request_body->AppendFileRange(
2925 FilePath(element.filePath.utf8()),
2926 0, kuint64max, base::Time());
2927 } else {
2928 request_body->AppendFileRange(
2929 FilePath(element.filePath.utf8()),
2930 static_cast<uint64>(element.fileStart),
2931 static_cast<uint64>(element.fileLength),
2932 base::Time::FromDoubleT(element.modificationTime));
2933 }
2934 break;
2935 }
2936 case WebHTTPBody::Element::TypeURL: {
2937 CHECK(false);
2938 break;
2939 }
2940 case WebHTTPBody::Element::TypeBlob: {
2941 CHECK(false);
2942 break;
2943 }
2944 default:
2945 NOTREACHED();
2946 }
2947 }
2948 }
2949 // Extract Header Info.
2950 WebString ContentType =
2951 request.httpHeaderField(WebString::fromUTF8("Content-Type"));
2952 std::string header(ContentType.utf8().data(),
2953 ContentType.utf8().length());
2954 OpenURL(frame, url, referrer, default_policy, header, request_body);
2955 }
2821 return WebKit::WebNavigationPolicyIgnore; // Suppress the load here. 2956 return WebKit::WebNavigationPolicyIgnore; // Suppress the load here.
2822 } 2957 }
2823 } 2958 }
2824 2959
2825 // Detect when a page is "forking" a new tab that can be safely rendered in 2960 // Detect when a page is "forking" a new tab that can be safely rendered in
2826 // its own process. This is done by sites like Gmail that try to open links 2961 // its own process. This is done by sites like Gmail that try to open links
2827 // in new windows without script connections back to the original page. We 2962 // in new windows without script connections back to the original page. We
2828 // treat such cases as browser navigations (in which we will create a new 2963 // treat such cases as browser navigations (in which we will create a new
2829 // renderer for a cross-site navigation), rather than WebKit navigations. 2964 // renderer for a cross-site navigation), rather than WebKit navigations.
2830 // 2965 //
(...skipping 18 matching lines...) Expand all
2849 frame->parent() == NULL && 2984 frame->parent() == NULL &&
2850 // Must not have issued the request from this page. 2985 // Must not have issued the request from this page.
2851 is_content_initiated && 2986 is_content_initiated &&
2852 // Must be targeted at the current tab. 2987 // Must be targeted at the current tab.
2853 default_policy == WebKit::WebNavigationPolicyCurrentTab && 2988 default_policy == WebKit::WebNavigationPolicyCurrentTab &&
2854 // Must be a JavaScript navigation, which appears as "other". 2989 // Must be a JavaScript navigation, which appears as "other".
2855 type == WebKit::WebNavigationTypeOther; 2990 type == WebKit::WebNavigationTypeOther;
2856 2991
2857 if (is_fork) { 2992 if (is_fork) {
2858 // Open the URL via the browser, not via WebKit. 2993 // Open the URL via the browser, not via WebKit.
2859 OpenURL(frame, url, Referrer(), default_policy); 2994 OpenURL(frame, url, Referrer(), default_policy, std::string(""), NULL);
2860 return WebKit::WebNavigationPolicyIgnore; 2995 return WebKit::WebNavigationPolicyIgnore;
2861 } 2996 }
2862
2863 return default_policy; 2997 return default_policy;
2864 } 2998 }
2865 2999
2866 bool RenderViewImpl::canHandleRequest( 3000 bool RenderViewImpl::canHandleRequest(
2867 WebFrame* frame, const WebURLRequest& request) { 3001 WebFrame* frame, const WebURLRequest& request) {
2868 // We allow WebKit to think that everything can be handled even though 3002 // We allow WebKit to think that everything can be handled even though
2869 // browser-side we limit what we load. 3003 // browser-side we limit what we load.
2870 return true; 3004 return true;
2871 } 3005 }
2872 3006
(...skipping 3480 matching lines...) Expand 10 before | Expand all | Expand 10 after
6353 } 6487 }
6354 #endif 6488 #endif
6355 6489
6356 void RenderViewImpl::OnReleaseDisambiguationPopupDIB( 6490 void RenderViewImpl::OnReleaseDisambiguationPopupDIB(
6357 TransportDIB::Handle dib_handle) { 6491 TransportDIB::Handle dib_handle) {
6358 TransportDIB* dib = TransportDIB::CreateWithHandle(dib_handle); 6492 TransportDIB* dib = TransportDIB::CreateWithHandle(dib_handle);
6359 RenderProcess::current()->ReleaseTransportDIB(dib); 6493 RenderProcess::current()->ReleaseTransportDIB(dib);
6360 } 6494 }
6361 6495
6362 } // namespace content 6496 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698