blob: 9899d86eaf6b243b1d159cad83424c31535a83fb [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/interstitials/security_interstitial_page_test_utils.h"
#include "base/strings/stringprintf.h"
#include "components/security_interstitials/content/security_interstitial_page.h"
#include "components/security_interstitials/content/security_interstitial_tab_helper.h"
#include "components/security_interstitials/core/controller_client.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/web_contents.h"
#include "content/public/test/browser_test_utils.h"
namespace chrome_browser_interstitials {
bool IsInterstitialDisplayingText(content::RenderFrameHost* interstitial_frame,
const std::string& text) {
// It's valid for |text| to contain "\'", but simply look for "'" instead
// since this function is used for searching host names and a predefined
// string.
DCHECK(text.find("\'") == std::string::npos);
std::string command = base::StringPrintf(
"var hasText = document.body.textContent.indexOf('%s') >= 0;"
"window.domAutomationController.send(hasText ? %d : %d);",
text.c_str(), security_interstitials::CMD_TEXT_FOUND,
security_interstitials::CMD_TEXT_NOT_FOUND);
int result = 0;
EXPECT_TRUE(content::ExecuteScriptAndExtractInt(interstitial_frame, command,
&result));
return result == security_interstitials::CMD_TEXT_FOUND;
}
bool InterstitialHasProceedLink(content::RenderFrameHost* interstitial_frame) {
int result = security_interstitials::CMD_ERROR;
const std::string javascript = base::StringPrintf(
"domAutomationController.send("
"(document.querySelector(\"#proceed-link\") === null) "
"? (%d) : (%d))",
security_interstitials::CMD_TEXT_NOT_FOUND,
security_interstitials::CMD_TEXT_FOUND);
EXPECT_TRUE(content::ExecuteScriptAndExtractInt(interstitial_frame,
javascript, &result));
return result == security_interstitials::CMD_TEXT_FOUND;
}
bool IsShowingInterstitial(content::WebContents* tab) {
security_interstitials::SecurityInterstitialTabHelper* helper =
security_interstitials::SecurityInterstitialTabHelper::FromWebContents(
tab);
return helper &&
helper->GetBlockingPageForCurrentlyCommittedNavigationForTesting();
}
bool IsShowingCaptivePortalInterstitial(content::WebContents* tab) {
return IsShowingInterstitial(tab) &&
IsInterstitialDisplayingText(tab->GetMainFrame(), "Connect to");
}
bool IsShowingSSLInterstitial(content::WebContents* tab) {
return IsShowingInterstitial(tab) &&
IsInterstitialDisplayingText(tab->GetMainFrame(),
"Your connection is not private");
}
bool IsShowingMITMInterstitial(content::WebContents* tab) {
return IsShowingInterstitial(tab) &&
IsInterstitialDisplayingText(tab->GetMainFrame(),
"An application is stopping");
}
bool IsShowingBadClockInterstitial(content::WebContents* tab) {
return IsShowingInterstitial(tab) &&
IsInterstitialDisplayingText(tab->GetMainFrame(), "Your clock is");
}
bool IsShowingBlockedInterceptionInterstitial(content::WebContents* tab) {
return IsShowingInterstitial(tab) &&
IsInterstitialDisplayingText(tab->GetMainFrame(),
"Anything you type, any pages you view");
}
bool IsShowingLegacyTLSInterstitial(content::WebContents* tab) {
return IsShowingInterstitial(tab) &&
IsInterstitialDisplayingText(tab->GetMainFrame(),
"outdated security configuration");
}
} // namespace chrome_browser_interstitials