blob: 49d89066d21282a393830cba60a26a37ea0ca3c4 [file] [log] [blame]
// Copyright 2017 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 "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/public/platform/platform.h"
#include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h"
#include "third_party/blink/renderer/core/script/modulator.h"
#include "third_party/blink/renderer/core/testing/page_test_base.h"
#include "third_party/blink/renderer/platform/bindings/script_state.h"
#include "third_party/blink/renderer/platform/testing/testing_platform_support.h"
namespace blink {
class DocumentModulatorImplTest : public PageTestBase {
DISALLOW_COPY_AND_ASSIGN(DocumentModulatorImplTest);
public:
DocumentModulatorImplTest() = default;
void SetUp() override;
protected:
Persistent<Modulator> modulator_;
};
void DocumentModulatorImplTest::SetUp() {
PageTestBase::SetUp(IntSize(500, 500));
ScriptState* script_state = ToScriptStateForMainWorld(&GetFrame());
modulator_ = Modulator::From(script_state);
}
TEST_F(DocumentModulatorImplTest, ResolveModuleSpecifier) {
// Taken from examples listed in
// https://html.spec.whatwg.org/multipage/webappapis.html#resolve-a-module-specifier
// "The following are valid module specifiers according to the above
// algorithm:"
EXPECT_TRUE(
modulator_
->ResolveModuleSpecifier("https://example.com/apples.js", NullURL())
.IsValid());
KURL resolved = modulator_->ResolveModuleSpecifier(
"http:example.com\\pears.mjs", NullURL());
EXPECT_TRUE(resolved.IsValid());
EXPECT_EQ("http://example.com/pears.mjs", resolved.GetString());
KURL base_url(NullURL(), "https://example.com");
EXPECT_TRUE(
modulator_->ResolveModuleSpecifier("//example.com/", base_url).IsValid());
EXPECT_TRUE(
modulator_->ResolveModuleSpecifier("./strawberries.js.cgi", base_url)
.IsValid());
EXPECT_TRUE(
modulator_->ResolveModuleSpecifier("../lychees", base_url).IsValid());
EXPECT_TRUE(
modulator_->ResolveModuleSpecifier("/limes.jsx", base_url).IsValid());
EXPECT_TRUE(
modulator_
->ResolveModuleSpecifier(
"data:text/javascript,export default 'grapes';", NullURL())
.IsValid());
EXPECT_TRUE(
modulator_
->ResolveModuleSpecifier(
"blob:https://whatwg.org/d0360e2f-caee-469f-9a2f-87d5b0456f6f",
KURL())
.IsValid());
// "The following are valid module specifiers according to the above
// algorithm, but will invariably cause failures when they are fetched:"
EXPECT_TRUE(modulator_
->ResolveModuleSpecifier(
"javascript:export default 'artichokes';", NullURL())
.IsValid());
EXPECT_TRUE(modulator_
->ResolveModuleSpecifier(
"data:text/plain,export default 'kale';", NullURL())
.IsValid());
EXPECT_TRUE(
modulator_->ResolveModuleSpecifier("about:legumes", NullURL()).IsValid());
EXPECT_TRUE(
modulator_->ResolveModuleSpecifier("wss://example.com/celery", NullURL())
.IsValid());
// "The following are not valid module specifiers according to the above
// algorithm:"
EXPECT_FALSE(
modulator_->ResolveModuleSpecifier("https://f:b/c", NullURL()).IsValid());
EXPECT_FALSE(
modulator_->ResolveModuleSpecifier("pumpkins.js", NullURL()).IsValid());
// Unprefixed module specifiers should still fail w/ a valid baseURL.
EXPECT_FALSE(
modulator_->ResolveModuleSpecifier("avocados.js", base_url).IsValid());
}
} // namespace blink