blob: c2fd0376ced944ca897fb0565543d8b4609ad0c2 [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/test/scoped_feature_list.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "content/public/test/browser_test.h"
#include "content/public/test/browser_test_utils.h"
#include "net/dns/mock_host_resolver.h"
#include "net/test/embedded_test_server/default_handlers.h"
#include "third_party/blink/public/common/features_generated.h"
class AIOnDeviceBrowserTest : public InProcessBrowserTest {
public:
AIOnDeviceBrowserTest() {
feature_list_.InitWithFeatures(
{blink::features::kAIPromptAPIMultimodalInput,
blink::features::kAIRewriterAPI, blink::features::kAISummarizationAPI,
blink::features::kAIWriterAPI},
{});
}
void SetUpOnMainThread() override {
host_resolver()->AddRule("*", "127.0.0.1");
embedded_https_test_server().SetSSLConfig(
net::EmbeddedTestServer::CERT_TEST_NAMES);
net::test_server::RegisterDefaultHandlers(&embedded_https_test_server());
ASSERT_TRUE(embedded_https_test_server().Start());
auto* tab = browser()->tab_strip_model()->GetActiveWebContents();
GURL url(embedded_https_test_server().GetURL("a.test", "/empty.html"));
ASSERT_TRUE(NavigateToURL(tab, url));
}
private:
base::test::ScopedFeatureList feature_list_;
};
IN_PROC_BROWSER_TEST_F(AIOnDeviceBrowserTest, APIsExposedToWindowNotWorker) {
static constexpr char kWindow[] = "try { %s; 'OK'; } catch (e) { e.name; }";
static constexpr char kWorker[] =
R"JS(
const workerCode = `try { %s; self.postMessage('OK'); }
catch (e) { self.postMessage(e.name); }`;
const blob = new Blob([workerCode], { type: 'text/javascript' });
const worker = new Worker(URL.createObjectURL(blob));
new Promise(r => { worker.onmessage = e => { r(e.data); }});
)JS";
auto* tab = browser()->tab_strip_model()->GetActiveWebContents();
for (const auto& id : {"LanguageModel", "Rewriter", "Summarizer", "Writer"}) {
EXPECT_EQ("OK", content::EvalJs(tab, absl::StrFormat(kWindow, id))) << id;
EXPECT_EQ("ReferenceError",
content::EvalJs(tab, absl::StrFormat(kWorker, id)))
<< id;
}
}