blob: 98dca3b412e29c2358d376012d9d9d0c14ba451c [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 <memory>
#include "chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.h"
#include "base/values.h"
#include "chrome/browser/ui/web_applications/web_app_controller_browsertest.h"
#include "chrome/common/webui_url_constants.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "chrome/test/base/ui_test_utils.h"
#include "content/public/browser/web_ui.h"
#include "content/public/test/browser_test.h"
#include "content/public/test/test_web_ui.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"
namespace {
constexpr char kGetInstalledApps[] = "getInstalledApps";
constexpr char kWebUiFunctionName[] = "webUiCallbackName";
} // namespace
namespace settings {
class TestingClearBrowsingDataHandler : public ClearBrowsingDataHandler {
public:
TestingClearBrowsingDataHandler(content::WebUI* webui, Profile* profile)
: ClearBrowsingDataHandler(webui, profile) {
set_web_ui(webui);
}
TestingClearBrowsingDataHandler& operator=(
const TestingClearBrowsingDataHandler&) = delete;
TestingClearBrowsingDataHandler(const TestingClearBrowsingDataHandler&) =
delete;
};
class ClearBrowsingDataHandlerBrowserTest
: public web_app::WebAppControllerBrowserTest {
public:
ClearBrowsingDataHandlerBrowserTest() = default;
~ClearBrowsingDataHandlerBrowserTest() = default;
void SetUpOnMainThread() override {
WebAppControllerBrowserTest::SetUpOnMainThread();
handler_ = std::make_unique<TestingClearBrowsingDataHandler>(
web_ui(), browser()->profile());
handler_->AllowJavascriptForTesting();
handler_->RegisterMessages();
}
void TearDownOnMainThread() override { handler_.reset(); }
protected:
web_app::AppId InstallAndLaunchApp(GURL& url) {
auto app_id = InstallPWA(url);
ui_test_utils::UrlLoadObserver url_observer(
url, content::NotificationService::AllSources());
auto* app_browser =
ClearBrowsingDataHandlerBrowserTest::LaunchWebAppBrowser(app_id);
url_observer.Wait();
DCHECK(app_browser);
DCHECK(app_browser != browser());
return app_id;
}
ClearBrowsingDataHandler* handler() { return handler_.get(); }
content::TestWebUI* web_ui() { return &web_ui_; }
private:
std::unique_ptr<ClearBrowsingDataHandler> handler_;
content::TestWebUI web_ui_;
};
IN_PROC_BROWSER_TEST_P(ClearBrowsingDataHandlerBrowserTest, GetInstalledApps) {
GURL url(https_server()->GetURL("/"));
InstallAndLaunchApp(url);
base::ListValue args;
args.AppendString(kWebUiFunctionName);
args.AppendInteger(1U);
web_ui()->HandleReceivedMessage(kGetInstalledApps, &args);
const content::TestWebUI::CallData& call_data = *web_ui()->call_data().back();
EXPECT_EQ("cr.webUIResponse", call_data.function_name());
EXPECT_EQ(kWebUiFunctionName, call_data.arg1()->GetString());
ASSERT_TRUE(call_data.arg2()->GetBool());
// Get results from JS callback.
const base::span<const base::Value> result = call_data.arg3()->GetList();
ASSERT_EQ(1U, result.size());
auto& installed_app = result.back();
ASSERT_EQ(url.host(), *(installed_app.FindStringKey("registerableDomain")));
}
INSTANTIATE_TEST_SUITE_P(
All,
ClearBrowsingDataHandlerBrowserTest,
::testing::Values(
web_app::ControllerType::kHostedAppController,
web_app::ControllerType::kUnifiedControllerWithBookmarkApp,
web_app::ControllerType::kUnifiedControllerWithWebApp),
web_app::ControllerTypeParamToString);
} // namespace settings