Change Dart_DefaultCanonicalizeUrl to accept the library url string instead of a library, this is useful to allow us to use this to generically resolve a Uri relative to another string.

BUG=
R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org/2068833002 .
This commit is contained in:
Siva Annamalai 2016-06-14 17:15:51 -07:00
parent e1d39e28cf
commit 72f7d1456c
5 changed files with 29 additions and 16 deletions

View file

@ -408,11 +408,12 @@ static Dart_Handle LoadDataAsync_Invoke(Dart_Handle tag,
Dart_Handle DartUtils::LibraryTagHandler(Dart_LibraryTag tag,
Dart_Handle library,
Dart_Handle url) {
if (tag == Dart_kCanonicalizeUrl) {
return Dart_DefaultCanonicalizeUrl(library, url);
Dart_Handle library_url = Dart_LibraryUrl(library);
if (Dart_IsError(library_url)) {
return library_url;
}
if (!Dart_IsLibrary(library)) {
return Dart_NewApiError("not a library");
if (tag == Dart_kCanonicalizeUrl) {
return Dart_DefaultCanonicalizeUrl(library_url, url);
}
if (!Dart_IsString(url)) {
return Dart_NewApiError("url is not a string");
@ -422,7 +423,6 @@ Dart_Handle DartUtils::LibraryTagHandler(Dart_LibraryTag tag,
if (Dart_IsError(result)) {
return result;
}
Dart_Handle library_url = Dart_LibraryUrl(library);
const char* library_url_string = NULL;
result = Dart_StringToCString(library_url, &library_url_string);
if (Dart_IsError(result)) {

View file

@ -362,7 +362,11 @@ Dart_Handle Loader::LibraryTagHandler(Dart_LibraryTag tag,
Dart_Handle library,
Dart_Handle url) {
if (tag == Dart_kCanonicalizeUrl) {
return Dart_DefaultCanonicalizeUrl(library, url);
Dart_Handle library_url = Dart_LibraryUrl(library);
if (Dart_IsError(library_url)) {
return library_url;
}
return Dart_DefaultCanonicalizeUrl(library_url, url);
}
const char* url_string = NULL;
Dart_Handle result = Dart_StringToCString(url, &url_string);
@ -374,6 +378,9 @@ Dart_Handle Loader::LibraryTagHandler(Dart_LibraryTag tag,
if (tag != Dart_kScriptTag) {
// Grab the library's url.
Dart_Handle library_url = Dart_LibraryUrl(library);
if (Dart_IsError(library_url)) {
return library_url;
}
const char* library_url_string = NULL;
result = Dart_StringToCString(library_url, &library_url_string);
if (Dart_IsError(result)) {
@ -399,6 +406,9 @@ Dart_Handle Loader::LibraryTagHandler(Dart_LibraryTag tag,
url_string);
}
Dart_Handle library_url = Dart_LibraryUrl(library);
if (Dart_IsError(library_url)) {
return library_url;
}
Dart_Handle library_file_path = DartUtils::LibraryFilePath(library_url);
const char* lib_path_str = NULL;
Dart_StringToCString(library_file_path, &lib_path_str);

View file

@ -2692,15 +2692,15 @@ DART_EXPORT Dart_Handle Dart_SetLibraryTagHandler(
* This canonicalization function should be sufficient for most
* embedders to implement the Dart_kCanonicalizeUrl tag.
*
* \param library The library relative to which the url is being
* resolved.
* \param base_url The base url relative to which the url is
* being resolved.
* \param url The url being resolved and canonicalized. This
* parameter is a string handle.
*
* \return If no error occurs, a String object is returned. Otherwise
* an error handle is returned.
*/
DART_EXPORT Dart_Handle Dart_DefaultCanonicalizeUrl(Dart_Handle library,
DART_EXPORT Dart_Handle Dart_DefaultCanonicalizeUrl(Dart_Handle base_url,
Dart_Handle url);
/**

View file

@ -5171,24 +5171,23 @@ DART_EXPORT Dart_Handle Dart_SetLibraryTagHandler(
}
DART_EXPORT Dart_Handle Dart_DefaultCanonicalizeUrl(Dart_Handle library,
DART_EXPORT Dart_Handle Dart_DefaultCanonicalizeUrl(Dart_Handle base_url,
Dart_Handle url) {
API_TIMELINE_DURATION;
DARTSCOPE(Thread::Current());
CHECK_CALLBACK_STATE(T);
const Library& lib = Api::UnwrapLibraryHandle(Z, library);
if (lib.IsNull()) {
RETURN_TYPE_ERROR(Z, library, Library);
const String& base_uri = Api::UnwrapStringHandle(Z, base_url);
if (base_uri.IsNull()) {
RETURN_TYPE_ERROR(Z, base_url, String);
}
const String& uri = Api::UnwrapStringHandle(Z, url);
if (uri.IsNull()) {
RETURN_TYPE_ERROR(Z, url, String);
}
const String& lib_uri = String::Handle(Z, lib.url());
const char* resolved_uri;
if (!ResolveUri(uri.ToCString(), lib_uri.ToCString(), &resolved_uri)) {
if (!ResolveUri(uri.ToCString(), base_uri.ToCString(), &resolved_uri)) {
return Api::NewError("%s: Unable to canonicalize uri '%s'.",
CURRENT_FUNC, uri.ToCString());
}

View file

@ -140,7 +140,11 @@ static Dart_Handle LibraryTagHandler(Dart_LibraryTag tag,
Dart_Handle library,
Dart_Handle url) {
if (tag == Dart_kCanonicalizeUrl) {
return Dart_DefaultCanonicalizeUrl(library, url);
Dart_Handle library_url = Dart_LibraryUrl(library);
if (Dart_IsError(library_url)) {
return library_url;
}
return Dart_DefaultCanonicalizeUrl(library_url, url);
}
if (tag == Dart_kScriptTag) {
// Reload request.