1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file. 4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/ui/login/login_interstitial_delegate.h" 6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)LoginInterstitialDelegate::LoginInterstitialDelegate( 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::WebContents* web_contents, 9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const GURL& request_url, 10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::Closure& callback) 11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) : callback_(callback) { 12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // The interstitial page owns us. 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::InterstitialPage* interstitial_page = 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::InterstitialPage::Create(web_contents, 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) true, 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) request_url, 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) this); 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) interstitial_page->Show(); 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)LoginInterstitialDelegate::~LoginInterstitialDelegate() { 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void LoginInterstitialDelegate::CommandReceived(const std::string& command) { 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) callback_.Run(); 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)std::string LoginInterstitialDelegate::GetHTMLContents() { 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Showing an interstitial results in a new navigation, and a new navigation 30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // closes all modal dialogs on the page. Therefore the login prompt must be 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // shown after the interstitial is displayed. This is done by sending a 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // command from the interstitial page as soon as it is loaded. 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return std::string( 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "<!DOCTYPE html>" 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "<html><body><script>" 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "window.domAutomationController.setAutomationId(1);" 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "window.domAutomationController.send('1');" 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "</script></body></html>"); 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 40