Chromium Code Reviews| Index: sky/engine/core/script/dart_loader.cc |
| diff --git a/sky/engine/core/script/dart_loader.cc b/sky/engine/core/script/dart_loader.cc |
| index 9f6418167ec2aa7f2f7a705a8566f8302c9a1fb9..58fabf9eb4dc2c8d618e029399fe40b485dd410c 100644 |
| --- a/sky/engine/core/script/dart_loader.cc |
| +++ b/sky/engine/core/script/dart_loader.cc |
| @@ -27,12 +27,24 @@ Dart_Handle CanonicalizeURL(DartState* state, |
| Dart_Handle library, |
| Dart_Handle url) { |
| String string = StringFromDart(url); |
| + |
| if (string.startsWith("dart:") || string.startsWith("mojo:")) |
| return url; |
| // TODO(dart): Figure out how 'package:' should work in sky. |
| if (string.startsWith("package:")) { |
| - string.replace("package:", "/packages/"); |
| + KURL baseUri = DOMDartState::Current()->document()->baseURI(); |
| + bool is_packaged_app = baseUri.string().startsWith("file://"); |
|
eseidel
2015/04/14 17:06:31
Why aren't packaged apps just served over http loc
|
| + |
| + if (is_packaged_app) { |
| + // In packaged apps, |package:<foo>| is specified relative to the base URL |
| + // of the application. |
| + string.replace("package:", ""); |
| + string = KURL(baseUri, string).string(); |
| + } else { |
| + string.replace("package:", "/packages/"); |
| + } |
| } |
| + |
| String library_url_string = StringFromDart(Dart_LibraryUrl(library)); |
| KURL library_url = KURL(ParsedURLString, library_url_string); |
| KURL resolved_url = KURL(library_url, string); |
| @@ -60,7 +72,14 @@ class DartLoader::Job : public DartDependency, |
| private: |
| // MojoFetcher::Client |
| void OnReceivedResponse(mojo::URLResponsePtr response) override { |
| - if (response->status_code != 200) { |
| + bool failed_load = response->status_code != 200; |
| + |
| + // TODO(blundell): Why are successful loads of file:// URLs returning a |
| + // status code of 0? |
| + if (response->status_code == 0) { |
|
eseidel
2015/04/14 17:06:31
Here again, instead of teaching Sky to understand
|
| + failed_load = response->error != NULL; |
| + } |
| + if (failed_load) { |
| loader_->DidFailJob(this); |
| return; |
| } |