Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(335)

Unified Diff: Source/bindings/dart/DartUtilities.cpp

Issue 350653002: Fix package relative imports (Closed) Base URL: svn://svn.chromium.org/blink/branches/dart/1985
Patch Set: Use strings Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/bindings/dart/DartUtilities.cpp
diff --git a/Source/bindings/dart/DartUtilities.cpp b/Source/bindings/dart/DartUtilities.cpp
index 910a4b3672f30e866131a8b0c913b54df64c8292..85683e98c0a8250c91a902ac83c84d90eb6e9454 100644
--- a/Source/bindings/dart/DartUtilities.cpp
+++ b/Source/bindings/dart/DartUtilities.cpp
@@ -1094,32 +1094,32 @@ const uint8_t* DartUtilities::fullSnapshot(LocalFrame* frame)
Dart_Handle DartUtilities::canonicalizeUrl(Dart_Handle library, Dart_Handle urlHandle, String url)
{
- if (url.startsWith("dart:") || url.startsWith("package:"))
+ DEFINE_STATIC_LOCAL(String, dartPrefix, ("dart:"));
+ DEFINE_STATIC_LOCAL(String, packagePrefix, ("package:"));
+
+ if (url.startsWith(dartPrefix) || url.startsWith(packagePrefix))
+ // Not a relative URL.
return urlHandle;
Dart_Handle libraryURLHandle = Dart_LibraryUrl(library);
ASSERT(!Dart_IsError(libraryURLHandle));
String libraryURL = DartUtilities::toString(libraryURLHandle);
- bool packageScheme = false;
-
- const char* kPackagePrefix = "package:";
- const int kPackagePrefixLength = strlen(kPackagePrefix);
-
- const char* kHttpPrefix = "http://";
- const int kHttpPrefixLength = strlen(kHttpPrefix);
-
- if (libraryURL.startsWith(kPackagePrefix)) {
- // KURL has problems concating package:foo/bar (without slashes right after colon)
- // and relative urls. Therefore pretend to be a standard absolute URL.
- packageScheme = true;
- libraryURL = kHttpPrefix + libraryURL.substring(kPackagePrefixLength);
+ String result;
+ if (libraryURL.startsWith(packagePrefix) && !libraryURL.startsWith("package://")) {
+ // KURL expects a URL with an authority. If the library URL is
+ // "package:<path>", we convert to "package://_/<path>" for resolution
+ // and convert back.
+ DEFINE_STATIC_LOCAL(String, resolvePrefix, ("package://_/"));
+
+ libraryURL = resolvePrefix + libraryURL.substring(packagePrefix.length());
+ result = KURL(KURL(KURL(), libraryURL), url).string();
+ if (result.startsWith(resolvePrefix))
+ result = packagePrefix + result.substring(resolvePrefix.length());
+ } else {
+ result = KURL(KURL(KURL(), libraryURL), url).string();
}
- const KURL canonical = KURL(KURL(KURL(), libraryURL), url);
- String result = canonical.string();
- if (packageScheme)
- result = kPackagePrefix + result.substring(kHttpPrefixLength);
return DartUtilities::stringToDartString(result);
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698