12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/managed_mode/managed_mode_interstitial.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/i18n/rtl.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/metrics/histogram.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 1190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/values.h" 12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/managed_mode/managed_user_service.h" 13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/managed_mode/managed_user_service_factory.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/profiles/profile.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/pref_names.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/url_constants.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/browser_thread.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/interstitial_page.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/web_contents.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/web_contents_delegate.h" 2190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "content/public/browser/web_ui.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "grit/browser_resources.h" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "grit/generated_resources.h" 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/base/net_util.h" 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/base/resource/resource_bundle.h" 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/webui/jstemplate_builder.h" 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/webui/web_ui_util.h" 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using content::BrowserThread; 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ManagedModeInterstitial::ManagedModeInterstitial( 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContents* web_contents, 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL& url, 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Callback<void(bool)>& callback) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : web_contents_(web_contents), 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) url_(url), 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) weak_ptr_factory_(this), 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) callback_(callback) { 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* profile = 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile::FromBrowserContext(web_contents->GetBrowserContext()); 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) languages_ = profile->GetPrefs()->GetString(prefs::kAcceptLanguages); 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 444311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch interstitial_page_ = 454311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch content::InterstitialPage::Create(web_contents, true, url_, this); 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) interstitial_page_->Show(); 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ManagedModeInterstitial::~ManagedModeInterstitial() {} 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)std::string ManagedModeInterstitial::GetHTMLContents() { 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DictionaryValue strings; 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) strings.SetString("blockPageTitle", 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l10n_util::GetStringUTF16(IDS_BLOCK_INTERSTITIAL_TITLE)); 55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch Profile* profile = 57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch Profile::FromBrowserContext(web_contents_->GetBrowserContext()); 58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ManagedUserService* managed_user_service = 59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ManagedUserServiceFactory::GetForProfile(profile); 604311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 614311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch bool allow_access_requests = managed_user_service->AccessRequestsEnabled(); 624311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch strings.SetBoolean("allowAccessRequests", allow_access_requests); 634311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch string16 custodian = UTF8ToUTF16(managed_user_service->GetCustodianName()); 65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch strings.SetString( 66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "blockPageMessage", 674311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch allow_access_requests 684311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ? l10n_util::GetStringFUTF16(IDS_BLOCK_INTERSTITIAL_MESSAGE, 694311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch custodian) 704311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch : l10n_util::GetStringUTF16( 714311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch IDS_BLOCK_INTERSTITIAL_MESSAGE_ACCESS_REQUESTS_DISABLED)); 72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) strings.SetString("backButton", l10n_util::GetStringUTF16(IDS_BACK_BUTTON)); 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) strings.SetString( 7590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "requestAccessButton", 7690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) l10n_util::GetStringUTF16(IDS_BLOCK_INTERSTITIAL_REQUEST_ACCESS_BUTTON)); 7790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 7890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) strings.SetString( 7990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "requestSentMessage", 8090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) l10n_util::GetStringFUTF16(IDS_BLOCK_INTERSTITIAL_REQUEST_SENT_MESSAGE, 81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch custodian)); 8290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webui::SetFontAndTextDirection(&strings); 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 854311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch base::StringPiece html(ResourceBundle::GetSharedInstance().GetRawDataResource( 864311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch IDR_MANAGED_MODE_BLOCK_INTERSTITIAL_HTML)); 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webui::UseVersion2 version; 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return webui::GetI18nTemplateHtml(html, &strings); 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ManagedModeInterstitial::CommandReceived(const std::string& command) { 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // For use in histograms. 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) enum Commands { 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PREVIEW, 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BACK, 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NTP, 9890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ACCESS_REQUEST, 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HISTOGRAM_BOUNDING_VALUE 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (command == "\"back\"") { 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UMA_HISTOGRAM_ENUMERATION("ManagedMode.BlockingInterstitialCommand", 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BACK, 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HISTOGRAM_BOUNDING_VALUE); 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) interstitial_page_->DontProceed(); 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (command == "\"request\"") { 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UMA_HISTOGRAM_ENUMERATION("ManagedMode.BlockingInterstitialCommand", 11290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ACCESS_REQUEST, 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HISTOGRAM_BOUNDING_VALUE); 114868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 115868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) Profile* profile = 116868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) Profile::FromBrowserContext(web_contents_->GetBrowserContext()); 117868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ManagedUserService* managed_user_service = 118868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ManagedUserServiceFactory::GetForProfile(profile); 119868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) managed_user_service->AddAccessRequest(url_); 12090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) DVLOG(1) << "Sent access request for " << url_.spec(); 12190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NOTREACHED(); 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1284311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdochvoid ManagedModeInterstitial::OnProceed() { NOTREACHED(); } 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ManagedModeInterstitial::OnDontProceed() { 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DispatchContinueRequest(false); 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ManagedModeInterstitial::DispatchContinueRequest(bool continue_request) { 1354311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch BrowserThread::PostTask( 1364311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch BrowserThread::IO, FROM_HERE, base::Bind(callback_, continue_request)); 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 138