Index: third_party/WebKit/Source/core/dom/Modulator.cpp |
diff --git a/third_party/WebKit/Source/core/dom/Modulator.cpp b/third_party/WebKit/Source/core/dom/Modulator.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0172b722193dc097600607b33bb364caa1dbfda8 |
--- /dev/null |
+++ b/third_party/WebKit/Source/core/dom/Modulator.cpp |
@@ -0,0 +1,35 @@ |
+// 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 "core/dom/Modulator.h" |
+ |
+namespace blink { |
+ |
+KURL Modulator::resolveModuleSpecifier(const String& moduleRequest, |
+ const KURL& baseURL) { |
+ // Step 1. Apply the URL parser to specifier. If the result is not failure, |
+ // return the result. |
+ KURL url(KURL(), moduleRequest); |
+ if (url.isValid()) |
+ return url; |
+ |
+ // Step 2. If specifier does not start with the character U+002F SOLIDUS (/), |
+ // the two-character sequence U+002E FULL STOP, U+002F SOLIDUS (./), or the |
+ // three-character sequence U+002E FULL STOP, U+002E FULL STOP, U+002F SOLIDUS |
+ // (../), return failure and abort these steps. |
+ if (!moduleRequest.startsWith("/") && !moduleRequest.startsWith("./") && |
+ !moduleRequest.startsWith("../")) |
+ return KURL(); |
+ |
+ // Step 3. Return the result of applying the URL parser to specifier with |
+ // script's base URL as the base URL. |
+ DCHECK(baseURL.isValid()); |
+ KURL relativeURL(baseURL, moduleRequest); |
+ if (relativeURL.isValid()) |
+ return relativeURL; |
+ |
+ return KURL(); |
+} |
+ |
+} // namespace blink |