| Index: content/renderer/render_frame_impl.cc
|
| diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
|
| index 551545eb266cc147cb0d83ef246234a110e9dd27..575e282b2ef68f46cd0bb8bd6b8ac36468b00b17 100644
|
| --- a/content/renderer/render_frame_impl.cc
|
| +++ b/content/renderer/render_frame_impl.cc
|
| @@ -2460,11 +2460,9 @@ void RenderFrameImpl::willSendSubmitEvent(blink::WebLocalFrame* frame,
|
| FOR_EACH_OBSERVER(RenderFrameObserver, observers_, WillSendSubmitEvent(form));
|
| }
|
|
|
| -void RenderFrameImpl::willSubmitForm(blink::WebLocalFrame* frame,
|
| +void RenderFrameImpl::willSubmitForm(blink::WebDataSource* datasource,
|
| const blink::WebFormElement& form) {
|
| - DCHECK(!frame_ || frame_ == frame);
|
| - DocumentState* document_state =
|
| - DocumentState::FromDataSource(frame->provisionalDataSource());
|
| + DocumentState* document_state = DocumentState::FromDataSource(datasource);
|
| NavigationStateImpl* navigation_state =
|
| static_cast<NavigationStateImpl*>(document_state->navigation_state());
|
| InternalDocumentStateData* internal_data =
|
| @@ -2600,22 +2598,17 @@ void RenderFrameImpl::didCreateDataSource(blink::WebLocalFrame* frame,
|
| }
|
| }
|
|
|
| -void RenderFrameImpl::didStartProvisionalLoad(blink::WebLocalFrame* frame,
|
| +void RenderFrameImpl::didStartProvisionalLoad(blink::WebDataSource* datasource,
|
| double triggering_event_time) {
|
| - DCHECK(!frame_ || frame_ == frame);
|
| - WebDataSource* ds = frame->provisionalDataSource();
|
| -
|
| - // In fast/loader/stop-provisional-loads.html, we abort the load before this
|
| - // callback is invoked.
|
| - if (!ds)
|
| - return;
|
| + DCHECK(datasource);
|
|
|
| - TRACE_EVENT2("navigation", "RenderFrameImpl::didStartProvisionalLoad",
|
| - "id", routing_id_, "url", ds->request().url().string().utf8());
|
| - DocumentState* document_state = DocumentState::FromDataSource(ds);
|
| + TRACE_EVENT2("navigation", "RenderFrameImpl::didStartProvisionalLoad", "id",
|
| + routing_id_, "url", datasource->request().url().string().utf8());
|
| + DocumentState* document_state = DocumentState::FromDataSource(datasource);
|
|
|
| // We should only navigate to swappedout:// when is_swapped_out_ is true.
|
| - CHECK_IMPLIES(ds->request().url() == GURL(kSwappedOutURL), is_swapped_out_)
|
| + CHECK_IMPLIES(datasource->request().url() == GURL(kSwappedOutURL),
|
| + is_swapped_out_)
|
| << "Heard swappedout:// when not swapped out.";
|
|
|
| // Update the request time if WebKit has better knowledge of it.
|
| @@ -2627,12 +2620,12 @@ void RenderFrameImpl::didStartProvisionalLoad(blink::WebLocalFrame* frame,
|
| // Start time is only set after request time.
|
| document_state->set_start_load_time(Time::Now());
|
|
|
| - bool is_top_most = !frame->parent();
|
| + bool is_top_most = !frame_->parent();
|
| if (is_top_most) {
|
| render_view_->set_navigation_gesture(
|
| WebUserGestureIndicator::isProcessingUserGesture() ?
|
| NavigationGestureUser : NavigationGestureAuto);
|
| - } else if (ds->replacesCurrentHistoryItem()) {
|
| + } else if (datasource->replacesCurrentHistoryItem()) {
|
| // Subframe navigations that don't add session history items must be
|
| // marked with AUTO_SUBFRAME. See also didFailProvisionalLoad for how we
|
| // handle loading of error pages.
|
| @@ -2641,11 +2634,12 @@ void RenderFrameImpl::didStartProvisionalLoad(blink::WebLocalFrame* frame,
|
| }
|
|
|
| FOR_EACH_OBSERVER(RenderViewObserver, render_view_->observers(),
|
| - DidStartProvisionalLoad(frame));
|
| - FOR_EACH_OBSERVER(RenderFrameObserver, observers_, DidStartProvisionalLoad());
|
| + DidStartProvisionalLoad(datasource));
|
| + FOR_EACH_OBSERVER(RenderFrameObserver, observers_,
|
| + DidStartProvisionalLoad(datasource));
|
|
|
| Send(new FrameHostMsg_DidStartProvisionalLoadForFrame(
|
| - routing_id_, ds->request().url()));
|
| + routing_id_, datasource->request().url()));
|
| }
|
|
|
| void RenderFrameImpl::didReceiveServerRedirectForProvisionalLoad(
|
| @@ -2655,16 +2649,14 @@ void RenderFrameImpl::didReceiveServerRedirectForProvisionalLoad(
|
| }
|
|
|
| void RenderFrameImpl::didFailProvisionalLoad(
|
| - blink::WebLocalFrame* frame,
|
| + blink::WebDataSource* datasource,
|
| const blink::WebURLError& error,
|
| blink::WebHistoryCommitType commit_type) {
|
| TRACE_EVENT1("navigation", "RenderFrameImpl::didFailProvisionalLoad",
|
| "id", routing_id_);
|
| - DCHECK(!frame_ || frame_ == frame);
|
| - WebDataSource* ds = frame->provisionalDataSource();
|
| - DCHECK(ds);
|
| + DCHECK(datasource);
|
|
|
| - const WebURLRequest& failed_request = ds->request();
|
| + const WebURLRequest& failed_request = datasource->request();
|
|
|
| // Notify the browser that we failed a provisional load with an error.
|
| //
|
| @@ -2673,19 +2665,19 @@ void RenderFrameImpl::didFailProvisionalLoad(
|
| // notified the load stopped.
|
| //
|
| FOR_EACH_OBSERVER(RenderViewObserver, render_view_->observers(),
|
| - DidFailProvisionalLoad(frame, error));
|
| + DidFailProvisionalLoad(frame_, error));
|
| FOR_EACH_OBSERVER(RenderFrameObserver, observers_,
|
| DidFailProvisionalLoad(error));
|
|
|
| - SendFailedProvisionalLoad(failed_request, error, frame);
|
| + SendFailedProvisionalLoad(failed_request, error, frame_);
|
|
|
| if (!ShouldDisplayErrorPageForFailedLoad(error.reason, error.unreachableURL))
|
| return;
|
|
|
| // Make sure we never show errors in view source mode.
|
| - frame->enableViewSourceMode(false);
|
| + frame_->enableViewSourceMode(false);
|
|
|
| - DocumentState* document_state = DocumentState::FromDataSource(ds);
|
| + DocumentState* document_state = DocumentState::FromDataSource(datasource);
|
| NavigationStateImpl* navigation_state =
|
| static_cast<NavigationStateImpl*>(document_state->navigation_state());
|
|
|
| @@ -2992,27 +2984,21 @@ void RenderFrameImpl::didHandleOnloadEvents(blink::WebLocalFrame* frame) {
|
| }
|
| }
|
|
|
| -void RenderFrameImpl::didFailLoad(blink::WebLocalFrame* frame,
|
| +void RenderFrameImpl::didFailLoad(blink::WebDataSource* datasource,
|
| const blink::WebURLError& error,
|
| blink::WebHistoryCommitType commit_type) {
|
| TRACE_EVENT1("navigation", "RenderFrameImpl::didFailLoad",
|
| "id", routing_id_);
|
| - DCHECK(!frame_ || frame_ == frame);
|
| // TODO(nasko): Move implementation here. No state needed.
|
| - WebDataSource* ds = frame->dataSource();
|
| - DCHECK(ds);
|
| + DCHECK(datasource);
|
|
|
| FOR_EACH_OBSERVER(RenderViewObserver, render_view_->observers(),
|
| - DidFailLoad(frame, error));
|
| + DidFailLoad(frame_, error));
|
|
|
| - const WebURLRequest& failed_request = ds->request();
|
| + const WebURLRequest& failed_request = datasource->request();
|
| base::string16 error_description;
|
| GetContentClient()->renderer()->GetNavigationErrorStrings(
|
| - render_view_.get(),
|
| - frame,
|
| - failed_request,
|
| - error,
|
| - NULL,
|
| + render_view_.get(), frame_, failed_request, error, NULL,
|
| &error_description);
|
| Send(new FrameHostMsg_DidFailLoadWithError(routing_id_,
|
| failed_request.url(),
|
| @@ -3221,11 +3207,11 @@ void RenderFrameImpl::clearContextMenu() {
|
| }
|
|
|
| void RenderFrameImpl::willSendRequest(
|
| - blink::WebLocalFrame* frame,
|
| + blink::WebDataSource* datasource,
|
| unsigned identifier,
|
| blink::WebURLRequest& request,
|
| const blink::WebURLResponse& redirect_response) {
|
| - DCHECK(!frame_ || frame_ == frame);
|
| + DCHECK(datasource);
|
| // The request my be empty during tests.
|
| if (request.url().isEmpty())
|
| return;
|
| @@ -3238,26 +3224,23 @@ void RenderFrameImpl::willSendRequest(
|
| } else {
|
| // TODO(nasko): When the top-level frame is remote, there is no document.
|
| // This is broken and should be fixed to propagate the first party.
|
| - WebFrame* top = frame->top();
|
| + WebFrame* top = frame_->top();
|
| if (top->isWebLocalFrame()) {
|
| request.setFirstPartyForCookies(
|
| - frame->top()->document().firstPartyForCookies());
|
| + frame_->top()->document().firstPartyForCookies());
|
| }
|
| }
|
| }
|
|
|
| - WebDataSource* provisional_data_source = frame->provisionalDataSource();
|
| - WebDataSource* data_source =
|
| - provisional_data_source ? provisional_data_source : frame->dataSource();
|
| -
|
| - DocumentState* document_state = DocumentState::FromDataSource(data_source);
|
| + DocumentState* document_state = DocumentState::FromDataSource(datasource);
|
| DCHECK(document_state);
|
| InternalDocumentStateData* internal_data =
|
| InternalDocumentStateData::FromDocumentState(document_state);
|
| NavigationStateImpl* navigation_state =
|
| static_cast<NavigationStateImpl*>(document_state->navigation_state());
|
| ui::PageTransition transition_type = navigation_state->GetTransitionType();
|
| - if (provisional_data_source && provisional_data_source->isClientRedirect()) {
|
| + if (request.frameType() != blink::WebURLRequest::FrameTypeNone &&
|
| + datasource->isClientRedirect()) {
|
| transition_type = ui::PageTransitionFromInt(
|
| transition_type | ui::PAGE_TRANSITION_CLIENT_REDIRECT);
|
| }
|
| @@ -3265,10 +3248,7 @@ void RenderFrameImpl::willSendRequest(
|
| GURL request_url(request.url());
|
| GURL new_url;
|
| if (GetContentClient()->renderer()->WillSendRequest(
|
| - frame,
|
| - transition_type,
|
| - request_url,
|
| - request.firstPartyForCookies(),
|
| + frame_, transition_type, request_url, request.firstPartyForCookies(),
|
| &new_url)) {
|
| request.setURL(WebURL(new_url));
|
| }
|
| @@ -3325,7 +3305,7 @@ void RenderFrameImpl::willSendRequest(
|
| // when it is re-created in the new process.
|
| bool should_replace_current_entry = false;
|
| if (navigation_state->IsContentInitiated()) {
|
| - should_replace_current_entry = data_source->replacesCurrentHistoryItem();
|
| + should_replace_current_entry = datasource->replacesCurrentHistoryItem();
|
| } else {
|
| // If the navigation is browser-initiated, the NavigationState contains the
|
| // correct value instead of the WebDataSource.
|
| @@ -3336,29 +3316,16 @@ void RenderFrameImpl::willSendRequest(
|
| navigation_state->common_params().should_replace_current_entry;
|
| }
|
|
|
| - int provider_id = kInvalidServiceWorkerProviderId;
|
| - if (request.frameType() == blink::WebURLRequest::FrameTypeTopLevel ||
|
| - request.frameType() == blink::WebURLRequest::FrameTypeNested) {
|
| - // |provisionalDataSource| may be null in some content::ResourceFetcher
|
| - // use cases, we don't hook those requests.
|
| - if (frame->provisionalDataSource()) {
|
| - ServiceWorkerNetworkProvider* provider =
|
| - ServiceWorkerNetworkProvider::FromDocumentState(
|
| - DocumentState::FromDataSource(frame->provisionalDataSource()));
|
| - provider_id = provider->provider_id();
|
| - }
|
| - } else if (frame->dataSource()) {
|
| - ServiceWorkerNetworkProvider* provider =
|
| - ServiceWorkerNetworkProvider::FromDocumentState(
|
| - DocumentState::FromDataSource(frame->dataSource()));
|
| - provider_id = provider->provider_id();
|
| - // Explicitly set the SkipServiceWorker flag here if the renderer process
|
| - // hasn't received SetControllerServiceWorker message.
|
| - if (!provider->IsControlledByServiceWorker())
|
| - request.setSkipServiceWorker(true);
|
| - }
|
| -
|
| - WebFrame* parent = frame->parent();
|
| + ServiceWorkerNetworkProvider* provider =
|
| + ServiceWorkerNetworkProvider::FromDocumentState(document_state);
|
| + int provider_id = provider->provider_id();
|
| + if (request.frameType() != blink::WebURLRequest::FrameTypeTopLevel &&
|
| + request.frameType() != blink::WebURLRequest::FrameTypeNested &&
|
| + !provider->IsControlledByServiceWorker()) {
|
| + request.setSkipServiceWorker(true);
|
| + }
|
| +
|
| + WebFrame* parent = frame_->parent();
|
| int parent_routing_id = MSG_ROUTING_NONE;
|
| if (!parent) {
|
| parent_routing_id = -1;
|
| @@ -3375,7 +3342,7 @@ void RenderFrameImpl::willSendRequest(
|
| extra_data->set_render_frame_id(routing_id_);
|
| extra_data->set_is_main_frame(!parent);
|
| extra_data->set_frame_origin(
|
| - GURL(frame->document().securityOrigin().toString()));
|
| + GURL(frame_->document().securityOrigin().toString()));
|
| extra_data->set_parent_is_main_frame(parent && !parent->parent());
|
| extra_data->set_parent_render_frame_id(parent_routing_id);
|
| extra_data->set_allow_download(
|
| @@ -3391,7 +3358,7 @@ void RenderFrameImpl::willSendRequest(
|
| request.setExtraData(extra_data);
|
|
|
| // TODO(creis): Update prefetching to work with out-of-process iframes.
|
| - WebFrame* top_frame = frame->top();
|
| + WebFrame* top_frame = frame_->top();
|
| if (top_frame && top_frame->isWebLocalFrame()) {
|
| DocumentState* top_document_state =
|
| DocumentState::FromDataSource(top_frame->dataSource());
|
| @@ -4906,11 +4873,6 @@ void RenderFrameImpl::BeginNavigation(blink::WebURLRequest* request) {
|
| // modifications should take place in willSendRequest, and in the
|
| // implementation of willSendRequest for the various InspectorAgents
|
| // (devtools).
|
| - //
|
| - // TODO(clamy): Apply devtools override.
|
| - // TODO(clamy): Make sure that navigation requests are not modified somewhere
|
| - // else in blink.
|
| - willSendRequest(frame_, 0, *request, blink::WebURLResponse());
|
|
|
| // TODO(clamy): Same-document navigations should not be sent back to the
|
| // browser.
|
| @@ -4920,6 +4882,11 @@ void RenderFrameImpl::BeginNavigation(blink::WebURLRequest* request) {
|
| WebDataSource* current_data_source = frame_->dataSource();
|
| WebDataSource* data_source =
|
| provisional_data_source ? provisional_data_source : current_data_source;
|
| + //
|
| + // TODO(clamy): Apply devtools override.
|
| + // TODO(clamy): Make sure that navigation requests are not modified somewhere
|
| + // else in blink.
|
| + willSendRequest(data_source, 0, *request, blink::WebURLResponse());
|
|
|
| // The current entry can only be replaced if there already is an entry in the
|
| // history list.
|
|
|