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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011, Google Inc. 1 // Copyright 2011, Google Inc.
2 // All rights reserved. 2 // All rights reserved.
3 // 3 //
4 // Redistribution and use in source and binary forms, with or without 4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions are 5 // modification, are permitted provided that the following conditions are
6 // met: 6 // met:
7 // 7 //
8 // * Redistributions of source code must retain the above copyright 8 // * Redistributions of source code must retain the above copyright
9 // notice, this list of conditions and the following disclaimer. 9 // notice, this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above 10 // * Redistributions in binary form must reproduce the above
(...skipping 1076 matching lines...) Expand 10 before | Expand all | Expand 10 after
1087 { 1087 {
1088 static const uint8_t snapshotBuffer[] = { 1088 static const uint8_t snapshotBuffer[] = {
1089 // DartSnapshot.bytes is generated by build system. 1089 // DartSnapshot.bytes is generated by build system.
1090 #include "DartSnapshot.bytes" 1090 #include "DartSnapshot.bytes"
1091 }; 1091 };
1092 return snapshotBuffer; 1092 return snapshotBuffer;
1093 } 1093 }
1094 1094
1095 Dart_Handle DartUtilities::canonicalizeUrl(Dart_Handle library, Dart_Handle urlH andle, String url) 1095 Dart_Handle DartUtilities::canonicalizeUrl(Dart_Handle library, Dart_Handle urlH andle, String url)
1096 { 1096 {
1097 if (url.startsWith("dart:") || url.startsWith("package:")) 1097 DEFINE_STATIC_LOCAL(String, dartPrefix, ("dart:"));
1098 DEFINE_STATIC_LOCAL(String, packagePrefix, ("package:"));
1099
1100 if (url.startsWith(dartPrefix) || url.startsWith(packagePrefix))
1101 // Not a relative URL.
1098 return urlHandle; 1102 return urlHandle;
1099 1103
1100 Dart_Handle libraryURLHandle = Dart_LibraryUrl(library); 1104 Dart_Handle libraryURLHandle = Dart_LibraryUrl(library);
1101 ASSERT(!Dart_IsError(libraryURLHandle)); 1105 ASSERT(!Dart_IsError(libraryURLHandle));
1102 String libraryURL = DartUtilities::toString(libraryURLHandle); 1106 String libraryURL = DartUtilities::toString(libraryURLHandle);
1103 1107
1104 bool packageScheme = false; 1108 String result;
1109 if (libraryURL.startsWith(packagePrefix) && !libraryURL.startsWith("package: //")) {
1110 // KURL expects a URL with an authority. If the library URL is
1111 // "package:<path>", we convert to "package://_/<path>" for resolution
1112 // and convert back.
1113 DEFINE_STATIC_LOCAL(String, resolvePrefix, ("package://_/"));
1105 1114
1106 const char* kPackagePrefix = "package:"; 1115 libraryURL = resolvePrefix + libraryURL.substring(packagePrefix.length() );
1107 const int kPackagePrefixLength = strlen(kPackagePrefix); 1116 result = KURL(KURL(KURL(), libraryURL), url).string();
1108 1117 if (result.startsWith(resolvePrefix))
1109 const char* kHttpPrefix = "http://"; 1118 result = packagePrefix + result.substring(resolvePrefix.length());
1110 const int kHttpPrefixLength = strlen(kHttpPrefix); 1119 } else {
1111 1120 result = KURL(KURL(KURL(), libraryURL), url).string();
1112 if (libraryURL.startsWith(kPackagePrefix)) {
1113 // KURL has problems concating package:foo/bar (without slashes right af ter colon)
1114 // and relative urls. Therefore pretend to be a standard absolute URL.
1115 packageScheme = true;
1116 libraryURL = kHttpPrefix + libraryURL.substring(kPackagePrefixLength);
1117 } 1121 }
1118 1122
1119 const KURL canonical = KURL(KURL(KURL(), libraryURL), url);
1120 String result = canonical.string();
1121 if (packageScheme)
1122 result = kPackagePrefix + result.substring(kHttpPrefixLength);
1123 return DartUtilities::stringToDartString(result); 1123 return DartUtilities::stringToDartString(result);
1124 } 1124 }
1125 1125
1126 void DartUtilities::reportProblem(ExecutionContext* context, const String& error , int line, int col) 1126 void DartUtilities::reportProblem(ExecutionContext* context, const String& error , int line, int col)
1127 { 1127 {
1128 String sourceURL = context->url().string(); 1128 String sourceURL = context->url().string();
1129 // FIXME: Pass in stack trace. 1129 // FIXME: Pass in stack trace.
1130 if (context && context->isDocument()) { 1130 if (context && context->isDocument()) {
1131 static_cast<Document*>(context)->reportException(ErrorEvent::create(erro r, sourceURL, line, col, 0), nullptr, NotSharableCrossOrigin); 1131 static_cast<Document*>(context)->reportException(ErrorEvent::create(erro r, sourceURL, line, col, 0), nullptr, NotSharableCrossOrigin);
1132 } 1132 }
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
1208 if (!v) { 1208 if (!v) {
1209 return 0; 1209 return 0;
1210 } 1210 }
1211 ASSERT(valueLen > 0 && static_cast<size_t>(valueLen) > strlen(v)); 1211 ASSERT(valueLen > 0 && static_cast<size_t>(valueLen) > strlen(v));
1212 strncpy(value, v, valueLen); 1212 strncpy(value, v, valueLen);
1213 value[valueLen - 1] = '\0'; 1213 value[valueLen - 1] = '\0';
1214 return strlen(value); 1214 return strlen(value);
1215 #endif 1215 #endif
1216 } 1216 }
1217 } 1217 }
OLDNEW
« 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