#include "base/base64.h"
#include "base/command_line.h"
#include "base/files/file_util.h"
#include "base/files/scoped_temp_dir.h"
#include "base/memory/raw_ptr.h"
#include "base/path_service.h"
#include "base/run_loop.h"
#include "base/strings/escape.h"
#include "base/strings/pattern.h"
#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
#include "base/test/scoped_feature_list.h"
#include "build/build_config.h"
#include "build/buildflag.h"
#include "content/browser/site_per_process_browsertest.h"
#include "content/common/features.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/navigation_entry.h"
#include "content/public/browser/web_contents.h"
#include "content/public/common/content_paths.h"
#include "content/public/common/content_switches.h"
#include "content/public/test/browser_test.h"
#include "content/public/test/browser_test_utils.h"
#include "content/public/test/content_browser_test.h"
#include "content/public/test/content_browser_test_utils.h"
#include "content/public/test/download_test_observer.h"
#include "content/public/test/test_navigation_observer.h"
#include "content/shell/browser/shell.h"
#include "content/shell/browser/shell_download_manager_delegate.h"
#include "net/dns/mock_host_resolver.h"
#include "net/test/embedded_test_server/embedded_test_server.h"
#include "storage/browser/file_system/external_mount_points.h"
#include "storage/common/file_system/file_system_mount_option.h"
#include "storage/common/file_system/file_system_types.h"
#include "third_party/blink/public/common/features.h"
#if BUILDFLAG(ENABLE_PLUGINS)
#include "content/public/browser/plugin_service.h"
#include "content/public/common/webplugininfo.h"
#endif
namespace content {
namespace {
const char kNavigationBlockedMessage[] = …;
const char kNavigationSuccessfulMessage[] = …;
const char kPDF[] = …;
enum ExpectedNavigationStatus { … };
class BlockedURLWarningConsoleObserver { … };
#if BUILDFLAG(ENABLE_PLUGINS)
void RegisterFakePlugin() { … }
void UnregisterFakePlugin() { … }
#endif
}
class BlockedSchemeNavigationBrowserTest
: public ContentBrowserTest,
public testing::WithParamInterface<const char*> { … };
INSTANTIATE_TEST_SUITE_P(…);
IN_PROC_BROWSER_TEST_P(BlockedSchemeNavigationBrowserTest,
BrowserInitiated_Allow) { … }
IN_PROC_BROWSER_TEST_P(BlockedSchemeNavigationBrowserTest,
HTML_Navigation_Block) { … }
class DataUrlNavigationBrowserTestWithFeatureFlag
: public BlockedSchemeNavigationBrowserTest { … };
IN_PROC_BROWSER_TEST_F(DataUrlNavigationBrowserTestWithFeatureFlag,
HTML_Navigation_Allow_FeatureFlag) { … }
IN_PROC_BROWSER_TEST_P(BlockedSchemeNavigationBrowserTest,
HTML_WindowOpen_Block) { … }
IN_PROC_BROWSER_TEST_P(BlockedSchemeNavigationBrowserTest,
HTML_FormPost_Block) { … }
IN_PROC_BROWSER_TEST_P(BlockedSchemeNavigationBrowserTest, HTML_Download) { … }
#if BUILDFLAG(IS_FUCHSIA)
#define MAYBE_HTML_NavigationFromFrame_Block …
#else
#define MAYBE_HTML_NavigationFromFrame_Block …
#endif
IN_PROC_BROWSER_TEST_P(BlockedSchemeNavigationBrowserTest,
MAYBE_HTML_NavigationFromFrame_Block) { … }
#if BUILDFLAG(IS_FUCHSIA)
#define MAYBE_HTML_WindowOpenFromFrame_Block …
#else
#define MAYBE_HTML_WindowOpenFromFrame_Block …
#endif
IN_PROC_BROWSER_TEST_P(BlockedSchemeNavigationBrowserTest,
MAYBE_HTML_WindowOpenFromFrame_Block) { … }
IN_PROC_BROWSER_TEST_P(BlockedSchemeNavigationBrowserTest,
HTML_Navigation_SameScheme_Block) { … }
IN_PROC_BROWSER_TEST_P(BlockedSchemeNavigationBrowserTest,
HTML_FormPost_SameScheme_Block) { … }
#if BUILDFLAG(IS_FUCHSIA)
#define MAYBE_HTML_NavigationFromFrame_TopFrameHasBlockedScheme_Block …
#else
#define MAYBE_HTML_NavigationFromFrame_TopFrameHasBlockedScheme_Block …
#endif
IN_PROC_BROWSER_TEST_P(
BlockedSchemeNavigationBrowserTest,
MAYBE_HTML_NavigationFromFrame_TopFrameHasBlockedScheme_Block) { … }
IN_PROC_BROWSER_TEST_P(
BlockedSchemeNavigationBrowserTest,
HTML_WindowOpenFromFrame_TopFrameHasBlockedScheme_Block) { … }
IN_PROC_BROWSER_TEST_P(BlockedSchemeNavigationBrowserTest,
OctetStream_BrowserInitiated) { … }
#if BUILDFLAG(IS_ANDROID)
#define MAYBE_DataUrl_OctetStream_WindowOpen …
#else
#define MAYBE_DataUrl_OctetStream_WindowOpen …
#endif
IN_PROC_BROWSER_TEST_F(BlockedSchemeNavigationBrowserTest,
MAYBE_DataUrl_OctetStream_WindowOpen) { … }
IN_PROC_BROWSER_TEST_F(BlockedSchemeNavigationBrowserTest,
FilesystemUrl_OctetStream_WindowOpen) { … }
IN_PROC_BROWSER_TEST_F(BlockedSchemeNavigationBrowserTest,
DataUrl_OctetStream_Navigation) { … }
IN_PROC_BROWSER_TEST_F(BlockedSchemeNavigationBrowserTest,
FilesystemUrl_OctetStream_Navigation) { … }
IN_PROC_BROWSER_TEST_F(BlockedSchemeNavigationBrowserTest,
DataUrl_OctetStream_FormPost) { … }
IN_PROC_BROWSER_TEST_F(BlockedSchemeNavigationBrowserTest,
FilesystemUrl_OctetStream_FormPost) { … }
IN_PROC_BROWSER_TEST_F(BlockedSchemeNavigationBrowserTest,
DataUrl_OctetStream_NavigationFromFrame) { … }
#if BUILDFLAG(IS_FUCHSIA)
#define MAYBE_FilesystemUrl_OctetStream_NavigationFromFrame …
#else
#define MAYBE_FilesystemUrl_OctetStream_NavigationFromFrame …
#endif
IN_PROC_BROWSER_TEST_F(BlockedSchemeNavigationBrowserTest,
MAYBE_FilesystemUrl_OctetStream_NavigationFromFrame) { … }
IN_PROC_BROWSER_TEST_P(BlockedSchemeNavigationBrowserTest,
UnknownMimeType_BrowserInitiated_Download) { … }
#if BUILDFLAG(IS_ANDROID)
#define MAYBE_UnknownMimeType_WindowOpen …
#else
#define MAYBE_UnknownMimeType_WindowOpen …
#endif
IN_PROC_BROWSER_TEST_P(BlockedSchemeNavigationBrowserTest,
MAYBE_UnknownMimeType_WindowOpen) { … }
IN_PROC_BROWSER_TEST_F(BlockedSchemeNavigationBrowserTest,
DataUrl_UnknownMimeType_Navigation) { … }
IN_PROC_BROWSER_TEST_F(BlockedSchemeNavigationBrowserTest,
FilesystemUrl_UnknownMimeType_Navigation) { … }
IN_PROC_BROWSER_TEST_F(BlockedSchemeNavigationBrowserTest,
DataUrl_UnknownMimeType_FormPost) { … }
IN_PROC_BROWSER_TEST_F(BlockedSchemeNavigationBrowserTest,
FilesystemUrl_UnknownMimeType_FormPost) { … }
IN_PROC_BROWSER_TEST_F(BlockedSchemeNavigationBrowserTest,
DataUrl_UnknownMimeType_NavigationFromFrame) { … }
#if BUILDFLAG(IS_FUCHSIA)
#define MAYBE_FilesystemUrl_UnknownMimeType_NavigationFromFrame …
#else
#define MAYBE_FilesystemUrl_UnknownMimeType_NavigationFromFrame …
#endif
IN_PROC_BROWSER_TEST_F(
BlockedSchemeNavigationBrowserTest,
MAYBE_FilesystemUrl_UnknownMimeType_NavigationFromFrame) { … }
IN_PROC_BROWSER_TEST_P(BlockedSchemeNavigationBrowserTest,
PDF_BrowserInitiatedNavigation_Allow) { … }
IN_PROC_BROWSER_TEST_P(BlockedSchemeNavigationBrowserTest,
PDF_WindowOpen_Block) { … }
IN_PROC_BROWSER_TEST_P(BlockedSchemeNavigationBrowserTest,
PDF_Navigation_Block) { … }
IN_PROC_BROWSER_TEST_P(BlockedSchemeNavigationBrowserTest, PDF_FormPost_Block) { … }
#if BUILDFLAG(IS_FUCHSIA)
#define MAYBE_PDF_NavigationFromFrame_Block …
#else
#define MAYBE_PDF_NavigationFromFrame_Block …
#endif
IN_PROC_BROWSER_TEST_P(BlockedSchemeNavigationBrowserTest,
MAYBE_PDF_NavigationFromFrame_Block) { … }
IN_PROC_BROWSER_TEST_P(BlockedSchemeNavigationBrowserTest,
PDF_WindowOpenFromFrame_Block) { … }
IN_PROC_BROWSER_TEST_P(BlockedSchemeNavigationBrowserTest,
PDF_NavigationFromFrame_TopFrameHasBlockedScheme_Block) { … }
IN_PROC_BROWSER_TEST_P(BlockedSchemeNavigationBrowserTest,
PDF_WindowOpenFromFrame_TopFrameHasBlockedScheme_Block) { … }
IN_PROC_BROWSER_TEST_P(BlockedSchemeNavigationBrowserTest,
WindowOpenRedirectAndBack) { … }
class FilesystemUrlNavigationBrowserTest
: public ContentBrowserTest,
public testing::WithParamInterface<bool> { … };
IN_PROC_BROWSER_TEST_P(FilesystemUrlNavigationBrowserTest, External) { … }
INSTANTIATE_TEST_SUITE_P(…);
}