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

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

Issue 1371673002: Remove a bunch of provisionalDataSource() usage. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 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 unified diff | Download patch
« no previous file with comments | « content/renderer/render_frame_impl.h ('k') | content/renderer/render_view_browsertest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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_frame_impl.h" 5 #include "content/renderer/render_frame_impl.h"
6 6
7 #include <map> 7 #include <map>
8 #include <string> 8 #include <string>
9 9
10 #include "base/auto_reset.h" 10 #include "base/auto_reset.h"
(...skipping 2442 matching lines...) Expand 10 before | Expand all | Expand 10 after
2453 return render_view_->history_controller()->GetItemForNewChildFrame(this); 2453 return render_view_->history_controller()->GetItemForNewChildFrame(this);
2454 } 2454 }
2455 2455
2456 void RenderFrameImpl::willSendSubmitEvent(blink::WebLocalFrame* frame, 2456 void RenderFrameImpl::willSendSubmitEvent(blink::WebLocalFrame* frame,
2457 const blink::WebFormElement& form) { 2457 const blink::WebFormElement& form) {
2458 DCHECK(!frame_ || frame_ == frame); 2458 DCHECK(!frame_ || frame_ == frame);
2459 2459
2460 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, WillSendSubmitEvent(form)); 2460 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, WillSendSubmitEvent(form));
2461 } 2461 }
2462 2462
2463 void RenderFrameImpl::willSubmitForm(blink::WebLocalFrame* frame, 2463 void RenderFrameImpl::willSubmitForm(blink::WebDataSource* datasource,
2464 const blink::WebFormElement& form) { 2464 const blink::WebFormElement& form) {
2465 DCHECK(!frame_ || frame_ == frame); 2465 DocumentState* document_state = DocumentState::FromDataSource(datasource);
2466 DocumentState* document_state =
2467 DocumentState::FromDataSource(frame->provisionalDataSource());
2468 NavigationStateImpl* navigation_state = 2466 NavigationStateImpl* navigation_state =
2469 static_cast<NavigationStateImpl*>(document_state->navigation_state()); 2467 static_cast<NavigationStateImpl*>(document_state->navigation_state());
2470 InternalDocumentStateData* internal_data = 2468 InternalDocumentStateData* internal_data =
2471 InternalDocumentStateData::FromDocumentState(document_state); 2469 InternalDocumentStateData::FromDocumentState(document_state);
2472 2470
2473 if (ui::PageTransitionCoreTypeIs(navigation_state->GetTransitionType(), 2471 if (ui::PageTransitionCoreTypeIs(navigation_state->GetTransitionType(),
2474 ui::PAGE_TRANSITION_LINK)) { 2472 ui::PAGE_TRANSITION_LINK)) {
2475 navigation_state->set_transition_type(ui::PAGE_TRANSITION_FORM_SUBMIT); 2473 navigation_state->set_transition_type(ui::PAGE_TRANSITION_FORM_SUBMIT);
2476 } 2474 }
2477 2475
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
2593 provider_type = SERVICE_WORKER_PROVIDER_FOR_SANDBOXED_FRAME; 2591 provider_type = SERVICE_WORKER_PROVIDER_FOR_SANDBOXED_FRAME;
2594 } 2592 }
2595 scoped_ptr<ServiceWorkerNetworkProvider> network_provider( 2593 scoped_ptr<ServiceWorkerNetworkProvider> network_provider(
2596 new ServiceWorkerNetworkProvider(routing_id_, provider_type)); 2594 new ServiceWorkerNetworkProvider(routing_id_, provider_type));
2597 ServiceWorkerNetworkProvider::AttachToDocumentState( 2595 ServiceWorkerNetworkProvider::AttachToDocumentState(
2598 DocumentState::FromDataSource(datasource), 2596 DocumentState::FromDataSource(datasource),
2599 network_provider.Pass()); 2597 network_provider.Pass());
2600 } 2598 }
2601 } 2599 }
2602 2600
2603 void RenderFrameImpl::didStartProvisionalLoad(blink::WebLocalFrame* frame, 2601 void RenderFrameImpl::didStartProvisionalLoad(blink::WebDataSource* datasource,
2604 double triggering_event_time) { 2602 double triggering_event_time) {
2605 DCHECK(!frame_ || frame_ == frame); 2603 DCHECK(datasource);
2606 WebDataSource* ds = frame->provisionalDataSource();
2607 2604
2608 // In fast/loader/stop-provisional-loads.html, we abort the load before this 2605 TRACE_EVENT2("navigation", "RenderFrameImpl::didStartProvisionalLoad", "id",
2609 // callback is invoked. 2606 routing_id_, "url", datasource->request().url().string().utf8());
2610 if (!ds) 2607 DocumentState* document_state = DocumentState::FromDataSource(datasource);
2611 return;
2612
2613 TRACE_EVENT2("navigation", "RenderFrameImpl::didStartProvisionalLoad",
2614 "id", routing_id_, "url", ds->request().url().string().utf8());
2615 DocumentState* document_state = DocumentState::FromDataSource(ds);
2616 2608
2617 // We should only navigate to swappedout:// when is_swapped_out_ is true. 2609 // We should only navigate to swappedout:// when is_swapped_out_ is true.
2618 CHECK_IMPLIES(ds->request().url() == GURL(kSwappedOutURL), is_swapped_out_) 2610 CHECK_IMPLIES(datasource->request().url() == GURL(kSwappedOutURL),
2611 is_swapped_out_)
2619 << "Heard swappedout:// when not swapped out."; 2612 << "Heard swappedout:// when not swapped out.";
2620 2613
2621 // Update the request time if WebKit has better knowledge of it. 2614 // Update the request time if WebKit has better knowledge of it.
2622 if (document_state->request_time().is_null() && 2615 if (document_state->request_time().is_null() &&
2623 triggering_event_time != 0.0) { 2616 triggering_event_time != 0.0) {
2624 document_state->set_request_time(Time::FromDoubleT(triggering_event_time)); 2617 document_state->set_request_time(Time::FromDoubleT(triggering_event_time));
2625 } 2618 }
2626 2619
2627 // Start time is only set after request time. 2620 // Start time is only set after request time.
2628 document_state->set_start_load_time(Time::Now()); 2621 document_state->set_start_load_time(Time::Now());
2629 2622
2630 bool is_top_most = !frame->parent(); 2623 bool is_top_most = !frame_->parent();
2631 if (is_top_most) { 2624 if (is_top_most) {
2632 render_view_->set_navigation_gesture( 2625 render_view_->set_navigation_gesture(
2633 WebUserGestureIndicator::isProcessingUserGesture() ? 2626 WebUserGestureIndicator::isProcessingUserGesture() ?
2634 NavigationGestureUser : NavigationGestureAuto); 2627 NavigationGestureUser : NavigationGestureAuto);
2635 } else if (ds->replacesCurrentHistoryItem()) { 2628 } else if (datasource->replacesCurrentHistoryItem()) {
2636 // Subframe navigations that don't add session history items must be 2629 // Subframe navigations that don't add session history items must be
2637 // marked with AUTO_SUBFRAME. See also didFailProvisionalLoad for how we 2630 // marked with AUTO_SUBFRAME. See also didFailProvisionalLoad for how we
2638 // handle loading of error pages. 2631 // handle loading of error pages.
2639 static_cast<NavigationStateImpl*>(document_state->navigation_state()) 2632 static_cast<NavigationStateImpl*>(document_state->navigation_state())
2640 ->set_transition_type(ui::PAGE_TRANSITION_AUTO_SUBFRAME); 2633 ->set_transition_type(ui::PAGE_TRANSITION_AUTO_SUBFRAME);
2641 } 2634 }
2642 2635
2643 FOR_EACH_OBSERVER(RenderViewObserver, render_view_->observers(), 2636 FOR_EACH_OBSERVER(RenderViewObserver, render_view_->observers(),
2644 DidStartProvisionalLoad(frame)); 2637 DidStartProvisionalLoad(datasource));
2645 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, DidStartProvisionalLoad()); 2638 FOR_EACH_OBSERVER(RenderFrameObserver, observers_,
2639 DidStartProvisionalLoad(datasource));
2646 2640
2647 Send(new FrameHostMsg_DidStartProvisionalLoadForFrame( 2641 Send(new FrameHostMsg_DidStartProvisionalLoadForFrame(
2648 routing_id_, ds->request().url())); 2642 routing_id_, datasource->request().url()));
2649 } 2643 }
2650 2644
2651 void RenderFrameImpl::didReceiveServerRedirectForProvisionalLoad( 2645 void RenderFrameImpl::didReceiveServerRedirectForProvisionalLoad(
2652 blink::WebLocalFrame* frame) { 2646 blink::WebLocalFrame* frame) {
2653 DCHECK(!frame_ || frame_ == frame); 2647 DCHECK(!frame_ || frame_ == frame);
2654 render_view_->history_controller()->RemoveChildrenForRedirect(this); 2648 render_view_->history_controller()->RemoveChildrenForRedirect(this);
2655 } 2649 }
2656 2650
2657 void RenderFrameImpl::didFailProvisionalLoad( 2651 void RenderFrameImpl::didFailProvisionalLoad(
2658 blink::WebLocalFrame* frame, 2652 blink::WebDataSource* datasource,
2659 const blink::WebURLError& error, 2653 const blink::WebURLError& error,
2660 blink::WebHistoryCommitType commit_type) { 2654 blink::WebHistoryCommitType commit_type) {
2661 TRACE_EVENT1("navigation", "RenderFrameImpl::didFailProvisionalLoad", 2655 TRACE_EVENT1("navigation", "RenderFrameImpl::didFailProvisionalLoad",
2662 "id", routing_id_); 2656 "id", routing_id_);
2663 DCHECK(!frame_ || frame_ == frame); 2657 DCHECK(datasource);
2664 WebDataSource* ds = frame->provisionalDataSource();
2665 DCHECK(ds);
2666 2658
2667 const WebURLRequest& failed_request = ds->request(); 2659 const WebURLRequest& failed_request = datasource->request();
2668 2660
2669 // Notify the browser that we failed a provisional load with an error. 2661 // Notify the browser that we failed a provisional load with an error.
2670 // 2662 //
2671 // Note: It is important this notification occur before DidStopLoading so the 2663 // Note: It is important this notification occur before DidStopLoading so the
2672 // SSL manager can react to the provisional load failure before being 2664 // SSL manager can react to the provisional load failure before being
2673 // notified the load stopped. 2665 // notified the load stopped.
2674 // 2666 //
2675 FOR_EACH_OBSERVER(RenderViewObserver, render_view_->observers(), 2667 FOR_EACH_OBSERVER(RenderViewObserver, render_view_->observers(),
2676 DidFailProvisionalLoad(frame, error)); 2668 DidFailProvisionalLoad(frame_, error));
2677 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, 2669 FOR_EACH_OBSERVER(RenderFrameObserver, observers_,
2678 DidFailProvisionalLoad(error)); 2670 DidFailProvisionalLoad(error));
2679 2671
2680 SendFailedProvisionalLoad(failed_request, error, frame); 2672 SendFailedProvisionalLoad(failed_request, error, frame_);
2681 2673
2682 if (!ShouldDisplayErrorPageForFailedLoad(error.reason, error.unreachableURL)) 2674 if (!ShouldDisplayErrorPageForFailedLoad(error.reason, error.unreachableURL))
2683 return; 2675 return;
2684 2676
2685 // Make sure we never show errors in view source mode. 2677 // Make sure we never show errors in view source mode.
2686 frame->enableViewSourceMode(false); 2678 frame_->enableViewSourceMode(false);
2687 2679
2688 DocumentState* document_state = DocumentState::FromDataSource(ds); 2680 DocumentState* document_state = DocumentState::FromDataSource(datasource);
2689 NavigationStateImpl* navigation_state = 2681 NavigationStateImpl* navigation_state =
2690 static_cast<NavigationStateImpl*>(document_state->navigation_state()); 2682 static_cast<NavigationStateImpl*>(document_state->navigation_state());
2691 2683
2692 // If this is a failed back/forward/reload navigation, then we need to do a 2684 // If this is a failed back/forward/reload navigation, then we need to do a
2693 // 'replace' load. This is necessary to avoid messing up session history. 2685 // 'replace' load. This is necessary to avoid messing up session history.
2694 // Otherwise, we do a normal load, which simulates a 'go' navigation as far 2686 // Otherwise, we do a normal load, which simulates a 'go' navigation as far
2695 // as session history is concerned. 2687 // as session history is concerned.
2696 bool replace = commit_type != blink::WebStandardCommit; 2688 bool replace = commit_type != blink::WebStandardCommit;
2697 2689
2698 // If we failed on a browser initiated request, then make sure that our error 2690 // If we failed on a browser initiated request, then make sure that our error
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after
2985 frame->dataSource()->request().inputPerfMetricReportPolicy()); 2977 frame->dataSource()->request().inputPerfMetricReportPolicy());
2986 base::TimeTicks ui_timestamp = base::TimeTicks() + 2978 base::TimeTicks ui_timestamp = base::TimeTicks() +
2987 base::TimeDelta::FromSecondsD( 2979 base::TimeDelta::FromSecondsD(
2988 frame->dataSource()->request().uiStartTime()); 2980 frame->dataSource()->request().uiStartTime());
2989 2981
2990 Send(new FrameHostMsg_DocumentOnLoadCompleted( 2982 Send(new FrameHostMsg_DocumentOnLoadCompleted(
2991 routing_id_, report_type, ui_timestamp)); 2983 routing_id_, report_type, ui_timestamp));
2992 } 2984 }
2993 } 2985 }
2994 2986
2995 void RenderFrameImpl::didFailLoad(blink::WebLocalFrame* frame, 2987 void RenderFrameImpl::didFailLoad(blink::WebDataSource* datasource,
2996 const blink::WebURLError& error, 2988 const blink::WebURLError& error,
2997 blink::WebHistoryCommitType commit_type) { 2989 blink::WebHistoryCommitType commit_type) {
2998 TRACE_EVENT1("navigation", "RenderFrameImpl::didFailLoad", 2990 TRACE_EVENT1("navigation", "RenderFrameImpl::didFailLoad",
2999 "id", routing_id_); 2991 "id", routing_id_);
3000 DCHECK(!frame_ || frame_ == frame);
3001 // TODO(nasko): Move implementation here. No state needed. 2992 // TODO(nasko): Move implementation here. No state needed.
3002 WebDataSource* ds = frame->dataSource(); 2993 DCHECK(datasource);
3003 DCHECK(ds);
3004 2994
3005 FOR_EACH_OBSERVER(RenderViewObserver, render_view_->observers(), 2995 FOR_EACH_OBSERVER(RenderViewObserver, render_view_->observers(),
3006 DidFailLoad(frame, error)); 2996 DidFailLoad(frame_, error));
3007 2997
3008 const WebURLRequest& failed_request = ds->request(); 2998 const WebURLRequest& failed_request = datasource->request();
3009 base::string16 error_description; 2999 base::string16 error_description;
3010 GetContentClient()->renderer()->GetNavigationErrorStrings( 3000 GetContentClient()->renderer()->GetNavigationErrorStrings(
3011 render_view_.get(), 3001 render_view_.get(), frame_, failed_request, error, NULL,
3012 frame,
3013 failed_request,
3014 error,
3015 NULL,
3016 &error_description); 3002 &error_description);
3017 Send(new FrameHostMsg_DidFailLoadWithError(routing_id_, 3003 Send(new FrameHostMsg_DidFailLoadWithError(routing_id_,
3018 failed_request.url(), 3004 failed_request.url(),
3019 error.reason, 3005 error.reason,
3020 error_description, 3006 error_description,
3021 error.wasIgnoredByHandler)); 3007 error.wasIgnoredByHandler));
3022 } 3008 }
3023 3009
3024 void RenderFrameImpl::didFinishLoad(blink::WebLocalFrame* frame) { 3010 void RenderFrameImpl::didFinishLoad(blink::WebLocalFrame* frame) {
3025 TRACE_EVENT1("navigation", "RenderFrameImpl::didFinishLoad", 3011 TRACE_EVENT1("navigation", "RenderFrameImpl::didFinishLoad",
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
3214 #endif 3200 #endif
3215 3201
3216 Send(new FrameHostMsg_ContextMenu(routing_id_, params)); 3202 Send(new FrameHostMsg_ContextMenu(routing_id_, params));
3217 } 3203 }
3218 3204
3219 void RenderFrameImpl::clearContextMenu() { 3205 void RenderFrameImpl::clearContextMenu() {
3220 context_menu_node_.reset(); 3206 context_menu_node_.reset();
3221 } 3207 }
3222 3208
3223 void RenderFrameImpl::willSendRequest( 3209 void RenderFrameImpl::willSendRequest(
3224 blink::WebLocalFrame* frame, 3210 blink::WebDataSource* datasource,
3225 unsigned identifier, 3211 unsigned identifier,
3226 blink::WebURLRequest& request, 3212 blink::WebURLRequest& request,
3227 const blink::WebURLResponse& redirect_response) { 3213 const blink::WebURLResponse& redirect_response) {
3228 DCHECK(!frame_ || frame_ == frame); 3214 DCHECK(datasource);
3229 // The request my be empty during tests. 3215 // The request my be empty during tests.
3230 if (request.url().isEmpty()) 3216 if (request.url().isEmpty())
3231 return; 3217 return;
3232 3218
3233 // Set the first party for cookies url if it has not been set yet (new 3219 // Set the first party for cookies url if it has not been set yet (new
3234 // requests). For redirects, it is updated by WebURLLoaderImpl. 3220 // requests). For redirects, it is updated by WebURLLoaderImpl.
3235 if (request.firstPartyForCookies().isEmpty()) { 3221 if (request.firstPartyForCookies().isEmpty()) {
3236 if (request.frameType() == blink::WebURLRequest::FrameTypeTopLevel) { 3222 if (request.frameType() == blink::WebURLRequest::FrameTypeTopLevel) {
3237 request.setFirstPartyForCookies(request.url()); 3223 request.setFirstPartyForCookies(request.url());
3238 } else { 3224 } else {
3239 // TODO(nasko): When the top-level frame is remote, there is no document. 3225 // TODO(nasko): When the top-level frame is remote, there is no document.
3240 // This is broken and should be fixed to propagate the first party. 3226 // This is broken and should be fixed to propagate the first party.
3241 WebFrame* top = frame->top(); 3227 WebFrame* top = frame_->top();
3242 if (top->isWebLocalFrame()) { 3228 if (top->isWebLocalFrame()) {
3243 request.setFirstPartyForCookies( 3229 request.setFirstPartyForCookies(
3244 frame->top()->document().firstPartyForCookies()); 3230 frame_->top()->document().firstPartyForCookies());
3245 } 3231 }
3246 } 3232 }
3247 } 3233 }
3248 3234
3249 WebDataSource* provisional_data_source = frame->provisionalDataSource(); 3235 DocumentState* document_state = DocumentState::FromDataSource(datasource);
3250 WebDataSource* data_source =
3251 provisional_data_source ? provisional_data_source : frame->dataSource();
3252
3253 DocumentState* document_state = DocumentState::FromDataSource(data_source);
3254 DCHECK(document_state); 3236 DCHECK(document_state);
3255 InternalDocumentStateData* internal_data = 3237 InternalDocumentStateData* internal_data =
3256 InternalDocumentStateData::FromDocumentState(document_state); 3238 InternalDocumentStateData::FromDocumentState(document_state);
3257 NavigationStateImpl* navigation_state = 3239 NavigationStateImpl* navigation_state =
3258 static_cast<NavigationStateImpl*>(document_state->navigation_state()); 3240 static_cast<NavigationStateImpl*>(document_state->navigation_state());
3259 ui::PageTransition transition_type = navigation_state->GetTransitionType(); 3241 ui::PageTransition transition_type = navigation_state->GetTransitionType();
3260 if (provisional_data_source && provisional_data_source->isClientRedirect()) { 3242 if (request.frameType() != blink::WebURLRequest::FrameTypeNone &&
3243 datasource->isClientRedirect()) {
3261 transition_type = ui::PageTransitionFromInt( 3244 transition_type = ui::PageTransitionFromInt(
3262 transition_type | ui::PAGE_TRANSITION_CLIENT_REDIRECT); 3245 transition_type | ui::PAGE_TRANSITION_CLIENT_REDIRECT);
3263 } 3246 }
3264 3247
3265 GURL request_url(request.url()); 3248 GURL request_url(request.url());
3266 GURL new_url; 3249 GURL new_url;
3267 if (GetContentClient()->renderer()->WillSendRequest( 3250 if (GetContentClient()->renderer()->WillSendRequest(
3268 frame, 3251 frame_, transition_type, request_url, request.firstPartyForCookies(),
3269 transition_type,
3270 request_url,
3271 request.firstPartyForCookies(),
3272 &new_url)) { 3252 &new_url)) {
3273 request.setURL(WebURL(new_url)); 3253 request.setURL(WebURL(new_url));
3274 } 3254 }
3275 3255
3276 if (internal_data->is_cache_policy_override_set()) 3256 if (internal_data->is_cache_policy_override_set())
3277 request.setCachePolicy(internal_data->cache_policy_override()); 3257 request.setCachePolicy(internal_data->cache_policy_override());
3278 3258
3279 // The request's extra data may indicate that we should set a custom user 3259 // The request's extra data may indicate that we should set a custom user
3280 // agent. This needs to be done here, after WebKit is through with setting the 3260 // agent. This needs to be done here, after WebKit is through with setting the
3281 // user agent on its own. Similarly, it may indicate that we should set an 3261 // user agent on its own. Similarly, it may indicate that we should set an
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
3318 3298
3319 // Add an empty HTTP origin header for non GET methods if none is currently 3299 // Add an empty HTTP origin header for non GET methods if none is currently
3320 // present. 3300 // present.
3321 request.addHTTPOriginIfNeeded(WebString()); 3301 request.addHTTPOriginIfNeeded(WebString());
3322 3302
3323 // Attach |should_replace_current_entry| state to requests so that, should 3303 // Attach |should_replace_current_entry| state to requests so that, should
3324 // this navigation later require a request transfer, all state is preserved 3304 // this navigation later require a request transfer, all state is preserved
3325 // when it is re-created in the new process. 3305 // when it is re-created in the new process.
3326 bool should_replace_current_entry = false; 3306 bool should_replace_current_entry = false;
3327 if (navigation_state->IsContentInitiated()) { 3307 if (navigation_state->IsContentInitiated()) {
3328 should_replace_current_entry = data_source->replacesCurrentHistoryItem(); 3308 should_replace_current_entry = datasource->replacesCurrentHistoryItem();
3329 } else { 3309 } else {
3330 // If the navigation is browser-initiated, the NavigationState contains the 3310 // If the navigation is browser-initiated, the NavigationState contains the
3331 // correct value instead of the WebDataSource. 3311 // correct value instead of the WebDataSource.
3332 // 3312 //
3333 // TODO(davidben): Avoid this awkward duplication of state. See comment on 3313 // TODO(davidben): Avoid this awkward duplication of state. See comment on
3334 // NavigationState::should_replace_current_entry(). 3314 // NavigationState::should_replace_current_entry().
3335 should_replace_current_entry = 3315 should_replace_current_entry =
3336 navigation_state->common_params().should_replace_current_entry; 3316 navigation_state->common_params().should_replace_current_entry;
3337 } 3317 }
3338 3318
3339 int provider_id = kInvalidServiceWorkerProviderId; 3319 ServiceWorkerNetworkProvider* provider =
3340 if (request.frameType() == blink::WebURLRequest::FrameTypeTopLevel || 3320 ServiceWorkerNetworkProvider::FromDocumentState(document_state);
3341 request.frameType() == blink::WebURLRequest::FrameTypeNested) { 3321 int provider_id = provider->provider_id();
3342 // |provisionalDataSource| may be null in some content::ResourceFetcher 3322 if (request.frameType() != blink::WebURLRequest::FrameTypeTopLevel &&
3343 // use cases, we don't hook those requests. 3323 request.frameType() != blink::WebURLRequest::FrameTypeNested &&
3344 if (frame->provisionalDataSource()) { 3324 !provider->IsControlledByServiceWorker()) {
3345 ServiceWorkerNetworkProvider* provider = 3325 request.setSkipServiceWorker(true);
3346 ServiceWorkerNetworkProvider::FromDocumentState(
3347 DocumentState::FromDataSource(frame->provisionalDataSource()));
3348 provider_id = provider->provider_id();
3349 }
3350 } else if (frame->dataSource()) {
3351 ServiceWorkerNetworkProvider* provider =
3352 ServiceWorkerNetworkProvider::FromDocumentState(
3353 DocumentState::FromDataSource(frame->dataSource()));
3354 provider_id = provider->provider_id();
3355 // Explicitly set the SkipServiceWorker flag here if the renderer process
3356 // hasn't received SetControllerServiceWorker message.
3357 if (!provider->IsControlledByServiceWorker())
3358 request.setSkipServiceWorker(true);
3359 } 3326 }
3360 3327
3361 WebFrame* parent = frame->parent(); 3328 WebFrame* parent = frame_->parent();
3362 int parent_routing_id = MSG_ROUTING_NONE; 3329 int parent_routing_id = MSG_ROUTING_NONE;
3363 if (!parent) { 3330 if (!parent) {
3364 parent_routing_id = -1; 3331 parent_routing_id = -1;
3365 } else if (parent->isWebLocalFrame()) { 3332 } else if (parent->isWebLocalFrame()) {
3366 parent_routing_id = FromWebFrame(parent)->GetRoutingID(); 3333 parent_routing_id = FromWebFrame(parent)->GetRoutingID();
3367 } else { 3334 } else {
3368 parent_routing_id = RenderFrameProxy::FromWebFrame(parent)->routing_id(); 3335 parent_routing_id = RenderFrameProxy::FromWebFrame(parent)->routing_id();
3369 } 3336 }
3370 3337
3371 RequestExtraData* extra_data = new RequestExtraData(); 3338 RequestExtraData* extra_data = new RequestExtraData();
3372 extra_data->set_visibility_state(render_view_->visibilityState()); 3339 extra_data->set_visibility_state(render_view_->visibilityState());
3373 extra_data->set_custom_user_agent(custom_user_agent); 3340 extra_data->set_custom_user_agent(custom_user_agent);
3374 extra_data->set_requested_with(requested_with); 3341 extra_data->set_requested_with(requested_with);
3375 extra_data->set_render_frame_id(routing_id_); 3342 extra_data->set_render_frame_id(routing_id_);
3376 extra_data->set_is_main_frame(!parent); 3343 extra_data->set_is_main_frame(!parent);
3377 extra_data->set_frame_origin( 3344 extra_data->set_frame_origin(
3378 GURL(frame->document().securityOrigin().toString())); 3345 GURL(frame_->document().securityOrigin().toString()));
3379 extra_data->set_parent_is_main_frame(parent && !parent->parent()); 3346 extra_data->set_parent_is_main_frame(parent && !parent->parent());
3380 extra_data->set_parent_render_frame_id(parent_routing_id); 3347 extra_data->set_parent_render_frame_id(parent_routing_id);
3381 extra_data->set_allow_download( 3348 extra_data->set_allow_download(
3382 navigation_state->common_params().allow_download); 3349 navigation_state->common_params().allow_download);
3383 extra_data->set_transition_type(transition_type); 3350 extra_data->set_transition_type(transition_type);
3384 extra_data->set_should_replace_current_entry(should_replace_current_entry); 3351 extra_data->set_should_replace_current_entry(should_replace_current_entry);
3385 extra_data->set_transferred_request_child_id( 3352 extra_data->set_transferred_request_child_id(
3386 navigation_state->start_params().transferred_request_child_id); 3353 navigation_state->start_params().transferred_request_child_id);
3387 extra_data->set_transferred_request_request_id( 3354 extra_data->set_transferred_request_request_id(
3388 navigation_state->start_params().transferred_request_request_id); 3355 navigation_state->start_params().transferred_request_request_id);
3389 extra_data->set_service_worker_provider_id(provider_id); 3356 extra_data->set_service_worker_provider_id(provider_id);
3390 extra_data->set_stream_override(stream_override.Pass()); 3357 extra_data->set_stream_override(stream_override.Pass());
3391 request.setExtraData(extra_data); 3358 request.setExtraData(extra_data);
3392 3359
3393 // TODO(creis): Update prefetching to work with out-of-process iframes. 3360 // TODO(creis): Update prefetching to work with out-of-process iframes.
3394 WebFrame* top_frame = frame->top(); 3361 WebFrame* top_frame = frame_->top();
3395 if (top_frame && top_frame->isWebLocalFrame()) { 3362 if (top_frame && top_frame->isWebLocalFrame()) {
3396 DocumentState* top_document_state = 3363 DocumentState* top_document_state =
3397 DocumentState::FromDataSource(top_frame->dataSource()); 3364 DocumentState::FromDataSource(top_frame->dataSource());
3398 if (top_document_state) { 3365 if (top_document_state) {
3399 // TODO(gavinp): separate out prefetching and prerender field trials 3366 // TODO(gavinp): separate out prefetching and prerender field trials
3400 // if the rel=prerender rel type is sticking around. 3367 // if the rel=prerender rel type is sticking around.
3401 if (request.requestContext() == WebURLRequest::RequestContextPrefetch) 3368 if (request.requestContext() == WebURLRequest::RequestContextPrefetch)
3402 top_document_state->set_was_prefetcher(true); 3369 top_document_state->set_was_prefetcher(true);
3403 } 3370 }
3404 } 3371 }
(...skipping 1494 matching lines...) Expand 10 before | Expand all | Expand 10 after
4899 switches::kEnableBrowserSideNavigation)); 4866 switches::kEnableBrowserSideNavigation));
4900 DCHECK(request); 4867 DCHECK(request);
4901 // TODO(clamy): Execute the beforeunload event. 4868 // TODO(clamy): Execute the beforeunload event.
4902 4869
4903 // Note: At this stage, the goal is to apply all the modifications the 4870 // Note: At this stage, the goal is to apply all the modifications the
4904 // renderer wants to make to the request, and then send it to the browser, so 4871 // renderer wants to make to the request, and then send it to the browser, so
4905 // that the actual network request can be started. Ideally, all such 4872 // that the actual network request can be started. Ideally, all such
4906 // modifications should take place in willSendRequest, and in the 4873 // modifications should take place in willSendRequest, and in the
4907 // implementation of willSendRequest for the various InspectorAgents 4874 // implementation of willSendRequest for the various InspectorAgents
4908 // (devtools). 4875 // (devtools).
4909 //
4910 // TODO(clamy): Apply devtools override.
4911 // TODO(clamy): Make sure that navigation requests are not modified somewhere
4912 // else in blink.
4913 willSendRequest(frame_, 0, *request, blink::WebURLResponse());
4914 4876
4915 // TODO(clamy): Same-document navigations should not be sent back to the 4877 // TODO(clamy): Same-document navigations should not be sent back to the
4916 // browser. 4878 // browser.
4917 // TODO(clamy): Data urls should not be sent back to the browser either. 4879 // TODO(clamy): Data urls should not be sent back to the browser either.
4918 bool should_replace_current_entry = false; 4880 bool should_replace_current_entry = false;
4919 WebDataSource* provisional_data_source = frame_->provisionalDataSource(); 4881 WebDataSource* provisional_data_source = frame_->provisionalDataSource();
4920 WebDataSource* current_data_source = frame_->dataSource(); 4882 WebDataSource* current_data_source = frame_->dataSource();
4921 WebDataSource* data_source = 4883 WebDataSource* data_source =
4922 provisional_data_source ? provisional_data_source : current_data_source; 4884 provisional_data_source ? provisional_data_source : current_data_source;
4885 //
4886 // TODO(clamy): Apply devtools override.
4887 // TODO(clamy): Make sure that navigation requests are not modified somewhere
4888 // else in blink.
4889 willSendRequest(data_source, 0, *request, blink::WebURLResponse());
4923 4890
4924 // The current entry can only be replaced if there already is an entry in the 4891 // The current entry can only be replaced if there already is an entry in the
4925 // history list. 4892 // history list.
4926 if (data_source && render_view_->history_list_length_ > 0) { 4893 if (data_source && render_view_->history_list_length_ > 0) {
4927 should_replace_current_entry = data_source->replacesCurrentHistoryItem(); 4894 should_replace_current_entry = data_source->replacesCurrentHistoryItem();
4928 } 4895 }
4929 4896
4930 // These values are assumed on the browser side for navigations. These checks 4897 // These values are assumed on the browser side for navigations. These checks
4931 // ensure the renderer has the correct values. 4898 // ensure the renderer has the correct values.
4932 DCHECK_EQ(FETCH_REQUEST_MODE_SAME_ORIGIN, 4899 DCHECK_EQ(FETCH_REQUEST_MODE_SAME_ORIGIN,
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
5214 mojo::ServiceProviderPtr service_provider(21); 5181 mojo::ServiceProviderPtr service_provider(21);
5215 mojo::URLRequestPtr request(mojo::URLRequest::New()); 5182 mojo::URLRequestPtr request(mojo::URLRequest::New());
5216 request->url = mojo::String::From(url); 5183 request->url = mojo::String::From(url);
5217 mojo_shell_->ConnectToApplication(request.Pass(), GetProxy(&service_provider), 5184 mojo_shell_->ConnectToApplication(request.Pass(), GetProxy(&service_provider),
5218 nullptr, nullptr, 5185 nullptr, nullptr,
5219 base::Bind(&OnGotContentHandlerID)); 5186 base::Bind(&OnGotContentHandlerID));
5220 return service_provider.Pass(); 5187 return service_provider.Pass();
5221 } 5188 }
5222 5189
5223 } // namespace content 5190 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/render_frame_impl.h ('k') | content/renderer/render_view_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698