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

Unified Diff: sky/engine/core/script/dart_loader.cc

Issue 1085853002: Introduce Sky packaged apps. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Add example dart packaged app that uses Sky Created 5 years, 8 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
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;
}

Powered by Google App Engine
This is Rietveld 408576698