| // Copyright 2015 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "content/renderer/navigation_state.h" |
| |
| #include <memory> |
| #include <utility> |
| |
| #include "content/common/frame_messages.h" |
| #include "content/public/common/navigation_policy.h" |
| #include "content/renderer/internal_document_state_data.h" |
| #include "third_party/blink/public/mojom/commit_result/commit_result.mojom.h" |
| |
| namespace content { |
| |
| NavigationState::~NavigationState() { |
| RunCommitNavigationCallback(blink::mojom::CommitResult::Aborted); |
| navigation_client_.reset(); |
| } |
| |
| // static |
| std::unique_ptr<NavigationState> NavigationState::CreateBrowserInitiated( |
| const CommonNavigationParams& common_params, |
| const CommitNavigationParams& commit_params, |
| base::TimeTicks time_commit_requested, |
| mojom::FrameNavigationControl::CommitNavigationCallback callback, |
| mojom::NavigationClient::CommitNavigationCallback |
| per_navigation_mojo_interface_callback, |
| std::unique_ptr<NavigationClient> navigation_client, |
| bool was_initiated_in_this_frame) { |
| return base::WrapUnique(new NavigationState( |
| common_params, commit_params, time_commit_requested, false, |
| std::move(callback), std::move(per_navigation_mojo_interface_callback), |
| std::move(navigation_client), was_initiated_in_this_frame)); |
| } |
| |
| // static |
| std::unique_ptr<NavigationState> NavigationState::CreateContentInitiated() { |
| return base::WrapUnique(new NavigationState( |
| CommonNavigationParams(), CommitNavigationParams(), base::TimeTicks(), |
| true, content::mojom::FrameNavigationControl::CommitNavigationCallback(), |
| content::mojom::NavigationClient::CommitNavigationCallback(), nullptr, |
| true)); |
| } |
| |
| // static |
| NavigationState* NavigationState::FromDocumentLoader( |
| blink::WebDocumentLoader* document_loader) { |
| return InternalDocumentStateData::FromDocumentLoader(document_loader) |
| ->navigation_state(); |
| } |
| |
| bool NavigationState::WasWithinSameDocument() { |
| return was_within_same_document_; |
| } |
| |
| bool NavigationState::IsContentInitiated() { |
| return is_content_initiated_; |
| } |
| |
| void NavigationState::RunCommitNavigationCallback( |
| blink::mojom::CommitResult result) { |
| if (commit_callback_) |
| std::move(commit_callback_).Run(result); |
| } |
| |
| void NavigationState::RunPerNavigationInterfaceCommitNavigationCallback( |
| std::unique_ptr<::FrameHostMsg_DidCommitProvisionalLoad_Params> params, |
| mojom::DidCommitProvisionalLoadInterfaceParamsPtr interface_params) { |
| DCHECK(IsPerNavigationMojoInterfaceEnabled()); |
| if (per_navigation_mojo_interface_commit_callback_) |
| std::move(per_navigation_mojo_interface_commit_callback_) |
| .Run(std::move(params), std::move(interface_params)); |
| navigation_client_.reset(); |
| } |
| |
| NavigationState::NavigationState( |
| const CommonNavigationParams& common_params, |
| const CommitNavigationParams& commit_params, |
| base::TimeTicks time_commit_requested, |
| bool is_content_initiated, |
| mojom::FrameNavigationControl::CommitNavigationCallback callback, |
| mojom::NavigationClient::CommitNavigationCallback |
| per_navigation_mojo_interface_commit_callback, |
| std::unique_ptr<NavigationClient> navigation_client, |
| bool was_initiated_in_this_frame) |
| : request_committed_(false), |
| was_within_same_document_(false), |
| was_initiated_in_this_frame_(was_initiated_in_this_frame), |
| is_content_initiated_(is_content_initiated), |
| common_params_(common_params), |
| commit_params_(commit_params), |
| time_commit_requested_(time_commit_requested), |
| navigation_client_(std::move(navigation_client)), |
| commit_callback_(std::move(callback)), |
| per_navigation_mojo_interface_commit_callback_( |
| std::move(per_navigation_mojo_interface_commit_callback)) {} |
| } // namespace content |