// Copyright (c) 2014 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/interstitials/security_interstitial_page.h" #include #include "base/i18n/rtl.h" #include "base/metrics/histogram.h" #include "base/strings/utf_string_conversions.h" #include "base/values.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/interstitials/chrome_controller_client.h" #include "chrome/browser/profiles/profile.h" #include "chrome/common/pref_names.h" #include "chrome/grit/browser_resources.h" #include "chrome/grit/generated_resources.h" #include "components/grit/components_resources.h" #include "components/prefs/pref_service.h" #include "components/security_interstitials/core/common_string_util.h" #include "components/security_interstitials/core/metrics_helper.h" #include "content/public/browser/interstitial_page.h" #include "content/public/browser/page_navigator.h" #include "content/public/browser/web_contents.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/resource/resource_bundle.h" #include "ui/base/webui/jstemplate_builder.h" #include "ui/base/webui/web_ui_util.h" SecurityInterstitialPage::SecurityInterstitialPage( content::WebContents* web_contents, const GURL& request_url) : web_contents_(web_contents), request_url_(request_url), interstitial_page_(NULL), create_view_(true), controller_(new ChromeControllerClient(web_contents)) { // Creating interstitial_page_ without showing it leaks memory, so don't // create it here. } SecurityInterstitialPage::~SecurityInterstitialPage() { } content::InterstitialPage* SecurityInterstitialPage::interstitial_page() const { return interstitial_page_; } content::WebContents* SecurityInterstitialPage::web_contents() const { return web_contents_; } GURL SecurityInterstitialPage::request_url() const { return request_url_; } void SecurityInterstitialPage::DontCreateViewForTesting() { create_view_ = false; } void SecurityInterstitialPage::Show() { DCHECK(!interstitial_page_); interstitial_page_ = content::InterstitialPage::Create( web_contents_, ShouldCreateNewNavigation(), request_url_, this); if (!create_view_) interstitial_page_->DontCreateViewForTesting(); interstitial_page_->Show(); controller_->set_interstitial_page(interstitial_page_); AfterShow(); } bool SecurityInterstitialPage::IsPrefEnabled(const char* pref) { Profile* profile = Profile::FromBrowserContext(web_contents()->GetBrowserContext()); return profile->GetPrefs()->GetBoolean(pref); } base::string16 SecurityInterstitialPage::GetFormattedHostName() const { std::string languages; Profile* profile = Profile::FromBrowserContext(web_contents()->GetBrowserContext()); if (profile) languages = profile->GetPrefs()->GetString(prefs::kAcceptLanguages); return security_interstitials::common_string_util::GetFormattedHostName( request_url_, languages); } std::string SecurityInterstitialPage::GetHTMLContents() { base::DictionaryValue load_time_data; PopulateInterstitialStrings(&load_time_data); const std::string& app_locale = g_browser_process->GetApplicationLocale(); webui::SetLoadTimeDataDefaults(app_locale, &load_time_data); std::string html = ResourceBundle::GetSharedInstance() .GetRawDataResource(IDR_SECURITY_INTERSTITIAL_HTML) .as_string(); webui::AppendWebUiCssTextDefaults(&html); return webui::GetI18nTemplateHtml(html, &load_time_data); } void SecurityInterstitialPage::SetReportingPreference(bool report) { controller_->SetReportingPreference(report); } void SecurityInterstitialPage::OpenExtendedReportingPrivacyPolicy() { controller_->OpenExtendedReportingPrivacyPolicy(); } security_interstitials::MetricsHelper* SecurityInterstitialPage::metrics_helper() { return controller_->metrics_helper(); } void SecurityInterstitialPage::set_metrics_helper( scoped_ptr metrics_helper) { controller_->set_metrics_helper(std::move(metrics_helper)); }