1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "content/renderer/navigation_state.h"
6
7 #include <memory>
8 #include <utility>
9
10 #include "base/memory/ptr_util.h"
11 #include "content/common/frame_messages.h"
12 #include "content/public/common/navigation_policy.h"
13 #include "content/renderer/internal_document_state_data.h"
14 #include "third_party/blink/public/mojom/commit_result/commit_result.mojom.h"
15
16 namespace content {
17
~NavigationState()18 NavigationState::~NavigationState() {
19 navigation_client_.reset();
20 }
21
22 // static
CreateBrowserInitiated(mojom::CommonNavigationParamsPtr common_params,mojom::CommitNavigationParamsPtr commit_params,mojom::NavigationClient::CommitNavigationCallback commit_callback,std::unique_ptr<NavigationClient> navigation_client,bool was_initiated_in_this_frame)23 std::unique_ptr<NavigationState> NavigationState::CreateBrowserInitiated(
24 mojom::CommonNavigationParamsPtr common_params,
25 mojom::CommitNavigationParamsPtr commit_params,
26 mojom::NavigationClient::CommitNavigationCallback commit_callback,
27 std::unique_ptr<NavigationClient> navigation_client,
28 bool was_initiated_in_this_frame) {
29 return base::WrapUnique(new NavigationState(
30 std::move(common_params), std::move(commit_params), false,
31 std::move(commit_callback), std::move(navigation_client),
32 was_initiated_in_this_frame));
33 }
34
35 // static
CreateContentInitiated()36 std::unique_ptr<NavigationState> NavigationState::CreateContentInitiated() {
37 return base::WrapUnique(new NavigationState(
38 CreateCommonNavigationParams(), CreateCommitNavigationParams(), true,
39 content::mojom::NavigationClient::CommitNavigationCallback(), nullptr,
40 true));
41 }
42
43 // static
FromDocumentLoader(blink::WebDocumentLoader * document_loader)44 NavigationState* NavigationState::FromDocumentLoader(
45 blink::WebDocumentLoader* document_loader) {
46 return InternalDocumentStateData::FromDocumentLoader(document_loader)
47 ->navigation_state();
48 }
49
WasWithinSameDocument()50 bool NavigationState::WasWithinSameDocument() {
51 return was_within_same_document_;
52 }
53
IsContentInitiated()54 bool NavigationState::IsContentInitiated() {
55 return is_content_initiated_;
56 }
57
RunCommitNavigationCallback(std::unique_ptr<::FrameHostMsg_DidCommitProvisionalLoad_Params> params,mojom::DidCommitProvisionalLoadInterfaceParamsPtr interface_params)58 void NavigationState::RunCommitNavigationCallback(
59 std::unique_ptr<::FrameHostMsg_DidCommitProvisionalLoad_Params> params,
60 mojom::DidCommitProvisionalLoadInterfaceParamsPtr interface_params) {
61 if (commit_callback_) {
62 std::move(commit_callback_)
63 .Run(std::move(params), std::move(interface_params));
64 }
65 navigation_client_.reset();
66 }
67
NavigationState(mojom::CommonNavigationParamsPtr common_params,mojom::CommitNavigationParamsPtr commit_params,bool is_content_initiated,mojom::NavigationClient::CommitNavigationCallback commit_callback,std::unique_ptr<NavigationClient> navigation_client,bool was_initiated_in_this_frame)68 NavigationState::NavigationState(
69 mojom::CommonNavigationParamsPtr common_params,
70 mojom::CommitNavigationParamsPtr commit_params,
71 bool is_content_initiated,
72 mojom::NavigationClient::CommitNavigationCallback commit_callback,
73 std::unique_ptr<NavigationClient> navigation_client,
74 bool was_initiated_in_this_frame)
75 : was_within_same_document_(false),
76 was_initiated_in_this_frame_(was_initiated_in_this_frame),
77 is_content_initiated_(is_content_initiated),
78 common_params_(std::move(common_params)),
79 commit_params_(std::move(commit_params)),
80 navigation_client_(std::move(navigation_client)),
81 commit_callback_(std::move(commit_callback)) {}
82 } // namespace content
83