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

Side by Side Diff: sky/shell/dart/dart_library_provider_network.cc

Issue 1203143004: Make it possible to run Sky apps offline (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: gn check Created 5 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
« no previous file with comments | « sky/shell/dart/dart_library_provider_network.h ('k') | sky/shell/ios/sky_surface.mm » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "sky/shell/dart/dart_library_provider_network.h"
6
7 #include "base/bind.h"
8 #include "base/strings/string_util.h"
9 #include "sky/engine/tonic/dart_converter.h"
10 #include "url/gurl.h"
11
12 namespace sky {
13 namespace shell {
14 namespace {
15
16 mojo::URLLoaderPtr Fetch(mojo::NetworkService* network_service,
17 const String& url,
18 base::Callback<void(mojo::URLResponsePtr)> callback) {
19 mojo::URLLoaderPtr loader;
20 network_service->CreateURLLoader(GetProxy(&loader));
21
22 mojo::URLRequestPtr request = mojo::URLRequest::New();
23 request->url = url.toUTF8();
24 request->auto_follow_redirects = true;
25 loader->Start(request.Pass(), callback);
26
27 return loader.Pass();
28 }
29
30 } // namespace
31
32 class DartLibraryProviderNetwork::Job {
33 public:
34 Job(DartLibraryProviderNetwork* provider,
35 const String& name,
36 blink::DataPipeConsumerCallback callback)
37 : provider_(provider), callback_(callback), weak_factory_(this) {
38 url_loader_ =
39 Fetch(provider_->network_service(), name,
40 base::Bind(&Job::OnReceivedResponse, weak_factory_.GetWeakPtr()));
41 }
42
43 private:
44 void OnReceivedResponse(mojo::URLResponsePtr response) {
45 mojo::ScopedDataPipeConsumerHandle data;
46 if (response->status_code == 200)
47 data = response->body.Pass();
48 callback_.Run(data.Pass());
49 provider_->jobs_.remove(this);
50 // We're deleted now.
51 }
52
53 DartLibraryProviderNetwork* provider_;
54 blink::DataPipeConsumerCallback callback_;
55 mojo::URLLoaderPtr url_loader_;
56
57 base::WeakPtrFactory<Job> weak_factory_;
58 };
59
60 DartLibraryProviderNetwork::DartLibraryProviderNetwork(
61 mojo::NetworkService* network_service)
62 : network_service_(network_service) {
63 }
64
65 DartLibraryProviderNetwork::~DartLibraryProviderNetwork() {
66 }
67
68 void DartLibraryProviderNetwork::GetLibraryAsStream(
69 const String& name,
70 blink::DataPipeConsumerCallback callback) {
71 jobs_.add(adoptPtr(new Job(this, name, callback)));
72 }
73
74 Dart_Handle DartLibraryProviderNetwork::CanonicalizeURL(Dart_Handle library,
75 Dart_Handle url) {
76 std::string string = blink::StdStringFromDart(url);
77 if (StartsWithASCII(string, "dart:", true))
78 return url;
79 // TODO(abarth): The package root should be configurable.
80 if (StartsWithASCII(string, "package:", true))
81 ReplaceFirstSubstringAfterOffset(&string, 0, "package:", "/packages/");
82 GURL library_url(blink::StdStringFromDart(Dart_LibraryUrl(library)));
83 GURL resolved_url = library_url.Resolve(string);
84 return blink::StdStringToDart(resolved_url.spec());
85 }
86
87 } // namespace shell
88 } // namespace sky
OLDNEW
« no previous file with comments | « sky/shell/dart/dart_library_provider_network.h ('k') | sky/shell/ios/sky_surface.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698