blob: 675f01e13a9b3564a46816bdf055fcd69232021f [file] [log] [blame]
// 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 "chrome/browser/ui/browser_navigator_params.h"
#include <utility>
#include "build/build_config.h"
#include "chrome/browser/profiles/profile.h"
#include "content/public/browser/navigation_controller.h"
#include "content/public/browser/page_navigator.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/web_contents.h"
#if !BUILDFLAG(IS_ANDROID)
#include "chrome/browser/ui/browser.h"
#endif
using content::GlobalRequestID;
using content::NavigationController;
using content::WebContents;
#if BUILDFLAG(IS_ANDROID)
NavigateParams::NavigateParams(std::unique_ptr<WebContents> contents_to_insert)
: contents_to_insert(std::move(contents_to_insert)) {}
#else
NavigateParams::NavigateParams(Browser* a_browser,
const GURL& a_url,
ui::PageTransition a_transition)
: url(a_url), transition(a_transition), browser(a_browser) {}
NavigateParams::NavigateParams(Browser* a_browser,
std::unique_ptr<WebContents> contents_to_insert)
: contents_to_insert(std::move(contents_to_insert)), browser(a_browser) {}
#endif // BUILDFLAG(IS_ANDROID)
NavigateParams::NavigateParams(Profile* a_profile,
const GURL& a_url,
ui::PageTransition a_transition)
: url(a_url),
disposition(WindowOpenDisposition::NEW_FOREGROUND_TAB),
transition(a_transition),
window_action(SHOW_WINDOW),
initiating_profile(a_profile) {}
NavigateParams::NavigateParams(NavigateParams&&) = default;
NavigateParams::~NavigateParams() {}
void NavigateParams::FillNavigateParamsFromOpenURLParams(
const content::OpenURLParams& params) {
#if DCHECK_IS_ON()
DCHECK(params.Valid());
#endif
this->initiator_frame_token = params.initiator_frame_token;
this->initiator_process_id = params.initiator_process_id;
this->initiator_origin = params.initiator_origin;
this->referrer = params.referrer;
this->reload_type = params.reload_type;
this->source_site_instance = params.source_site_instance;
if (params.source_site_instance) {
this->initiating_profile =
static_cast<Profile*>(params.source_site_instance->GetBrowserContext());
}
this->source_contents = content::WebContents::FromRenderFrameHost(
content::RenderFrameHost::FromID(params.source_render_process_id,
params.source_render_frame_id));
this->frame_tree_node_id = params.frame_tree_node_id;
this->redirect_chain = params.redirect_chain;
this->extra_headers = params.extra_headers;
this->disposition = params.disposition;
this->trusted_source = false;
this->is_renderer_initiated = params.is_renderer_initiated;
this->should_replace_current_entry = params.should_replace_current_entry;
this->post_data = params.post_data;
this->started_from_context_menu = params.started_from_context_menu;
this->open_pwa_window_if_possible = params.open_app_window_if_possible;
this->user_gesture = params.user_gesture;
this->blob_url_loader_factory = params.blob_url_loader_factory;
this->href_translate = params.href_translate;
this->impression = params.impression;
// `disposition` is eventually coerced out of OFF_THE_RECORD, so we maintain
// this field separately.
if (params.disposition == WindowOpenDisposition::OFF_THE_RECORD) {
this->privacy_sensitivity = PrivacySensitivity::CROSS_OTR;
}
// Implementation notes:
// The following NavigateParams don't have an equivalent in OpenURLParams:
// browser
// contents_to_insert
// opened_by_another_window
// extension_app_id
// frame_name
// group
// input_start
// navigated_or_inserted_contents
// opener
// path_behavior
// switch_to_singleton_tab
// tabstrip_add_types
// tabstrip_index
// was_activated
// window_action
// window_bounds
//
// The following OpenURLParams don't have an equivalent in NavigateParams:
// triggering_event_info
}