1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
|
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/web_applications/web_app_navigation_capturing_browsertest_base.h"
#include <utility>
#include "base/run_loop.h"
#include "base/strings/string_number_conversions.h"
#include "base/test/run_until.h"
#include "build/buildflag.h"
#include "chrome/browser/apps/app_service/app_registry_cache_waiter.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_list.h"
#include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
#include "chrome/browser/web_applications/web_app_command_manager.h"
#include "chrome/browser/web_applications/web_app_provider.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "chrome/test/base/ui_test_utils.h"
#include "content/public/browser/web_contents.h"
#include "content/public/common/content_features.h"
#include "content/public/test/browser_test_utils.h"
#include "url/gurl.h"
using blink::mojom::ManifestLaunchHandler_ClientMode;
namespace web_app {
WebAppNavigationCapturingBrowserTestBase::
WebAppNavigationCapturingBrowserTestBase() {
std::map<std::string, std::string> parameters;
parameters["link_capturing_state"] = "reimpl_default_on";
scoped_feature_list_.InitAndEnableFeatureWithParameters(
features::kPwaNavigationCapturing, parameters);
#if BUILDFLAG(IS_CHROMEOS)
// TODO(crbug.com/366547977): CrOS doesn't use our nav capturing
// implementation.
NOTREACHED();
#endif
}
WebAppNavigationCapturingBrowserTestBase::
~WebAppNavigationCapturingBrowserTestBase() = default;
Browser*
WebAppNavigationCapturingBrowserTestBase::CallWindowOpenExpectNewBrowser(
content::WebContents* contents,
const GURL& url,
bool with_opener) {
ui_test_utils::BrowserChangeObserver browser_observer(
nullptr, ui_test_utils::BrowserChangeObserver::ChangeType::kAdded);
CallWindowOpen(contents, url, with_opener);
return browser_observer.Wait();
}
content::WebContents*
WebAppNavigationCapturingBrowserTestBase::CallWindowOpenExpectNewTab(
content::WebContents* contents,
const GURL& url,
bool with_opener) {
ui_test_utils::TabAddedWaiter tab_added_waiter(browser());
CallWindowOpen(contents, url, with_opener);
content::WebContents* new_contents = tab_added_waiter.Wait();
return new_contents;
}
void WebAppNavigationCapturingBrowserTestBase::CallWindowOpen(
content::WebContents* contents,
const GURL& url,
bool with_opener) {
constexpr char kScript[] = R"(
window.open($1, '_blank', 'noopener');
)";
constexpr char kScriptWithOpener[] = R"(
window.open($1, '_blank', 'opener,popup=false');
)";
std::string script =
content::JsReplace(with_opener ? kScriptWithOpener : kScript, url);
DLOG(INFO) << "Executing script: " << script;
EXPECT_TRUE(content::ExecJs(contents, script));
}
void WebAppNavigationCapturingBrowserTestBase::WaitForLaunchParams(
content::WebContents* contents,
int min_launch_params_to_wait_for) {
provider().command_manager().AwaitAllCommandsCompleteForTesting();
EXPECT_TRUE(base::test::RunUntil([&] {
return content::EvalJs(
contents,
"'launchParamsTargetUrls' in window && "
"launchParamsTargetUrls.length >= " +
base::NumberToString(min_launch_params_to_wait_for))
.ExtractBool();
}));
}
} // namespace web_app
|