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