OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "sky/engine/core/script/dart_library_provider_network.h" | 5 #include "sky/engine/core/script/dart_library_provider_webview.h" |
6 | 6 |
7 #include "sky/engine/platform/fetcher/MojoFetcher.h" | 7 #include "sky/engine/platform/fetcher/MojoFetcher.h" |
8 #include "sky/engine/platform/weborigin/KURL.h" | 8 #include "sky/engine/platform/weborigin/KURL.h" |
9 #include "sky/engine/tonic/dart_converter.h" | 9 #include "sky/engine/tonic/dart_converter.h" |
10 | 10 |
11 namespace blink { | 11 namespace blink { |
12 | 12 |
13 typedef base::Callback<void(mojo::ScopedDataPipeConsumerHandle)> | 13 class DartLibraryProviderWebView::Job : public MojoFetcher::Client { |
14 CompletionCallback; | |
15 | |
16 class DartLibraryProviderNetwork::Job : public MojoFetcher::Client { | |
17 public: | 14 public: |
18 Job(DartLibraryProviderNetwork* provider, | 15 Job(DartLibraryProviderWebView* provider, |
19 const String& name, | 16 const String& name, |
20 CompletionCallback callback) | 17 DataPipeConsumerCallback callback) |
21 : provider_(provider), callback_(callback) { | 18 : provider_(provider), callback_(callback) { |
22 fetcher_ = adoptPtr(new MojoFetcher(this, KURL(ParsedURLString, name))); | 19 fetcher_ = adoptPtr(new MojoFetcher(this, KURL(ParsedURLString, name))); |
23 } | 20 } |
24 | 21 |
25 ~Job() override {} | 22 ~Job() override {} |
26 | 23 |
27 private: | 24 private: |
28 void OnReceivedResponse(mojo::URLResponsePtr response) { | 25 void OnReceivedResponse(mojo::URLResponsePtr response) { |
29 if (response->status_code != 200) { | 26 if (response->status_code != 200) { |
30 callback_.Run(mojo::ScopedDataPipeConsumerHandle()); | 27 callback_.Run(mojo::ScopedDataPipeConsumerHandle()); |
31 } else { | 28 } else { |
32 callback_.Run(response->body.Pass()); | 29 callback_.Run(response->body.Pass()); |
33 } | 30 } |
34 provider_->jobs_.remove(this); | 31 provider_->jobs_.remove(this); |
35 // We're deleted now. | 32 // We're deleted now. |
36 } | 33 } |
37 | 34 |
38 DartLibraryProviderNetwork* provider_; | 35 DartLibraryProviderWebView* provider_; |
39 CompletionCallback callback_; | 36 DataPipeConsumerCallback callback_; |
40 OwnPtr<MojoFetcher> fetcher_; | 37 OwnPtr<MojoFetcher> fetcher_; |
41 }; | 38 }; |
42 | 39 |
43 DartLibraryProviderNetwork::PrefetchedLibrary::PrefetchedLibrary() { | 40 DartLibraryProviderWebView::DartLibraryProviderWebView() { |
44 } | 41 } |
45 | 42 |
46 DartLibraryProviderNetwork::PrefetchedLibrary::~PrefetchedLibrary() { | 43 DartLibraryProviderWebView::~DartLibraryProviderWebView() { |
47 } | 44 } |
48 | 45 |
49 DartLibraryProviderNetwork::DartLibraryProviderNetwork( | 46 void DartLibraryProviderWebView::GetLibraryAsStream( |
50 PassOwnPtr<PrefetchedLibrary> prefetched) | |
51 : prefetched_library_(prefetched) { | |
52 } | |
53 | |
54 DartLibraryProviderNetwork::~DartLibraryProviderNetwork() { | |
55 } | |
56 | |
57 void DartLibraryProviderNetwork::GetLibraryAsStream( | |
58 const String& name, | 47 const String& name, |
59 CompletionCallback callback) { | 48 DataPipeConsumerCallback callback) { |
60 if (prefetched_library_ && prefetched_library_->name == name) { | |
61 mojo::ScopedDataPipeConsumerHandle pipe = prefetched_library_->pipe.Pass(); | |
62 prefetched_library_ = nullptr; | |
63 callback.Run(pipe.Pass()); | |
64 return; | |
65 } | |
66 | |
67 jobs_.add(adoptPtr(new Job(this, name, callback))); | 49 jobs_.add(adoptPtr(new Job(this, name, callback))); |
68 } | 50 } |
69 | 51 |
70 Dart_Handle DartLibraryProviderNetwork::CanonicalizeURL(Dart_Handle library, | 52 Dart_Handle DartLibraryProviderWebView::CanonicalizeURL(Dart_Handle library, |
71 Dart_Handle url) { | 53 Dart_Handle url) { |
72 String string = StringFromDart(url); | 54 String string = StringFromDart(url); |
73 if (string.startsWith("dart:")) | 55 if (string.startsWith("dart:")) |
74 return url; | 56 return url; |
75 // TODO(abarth): The package root should be configurable. | 57 // TODO(abarth): The package root should be configurable. |
76 if (string.startsWith("package:")) | 58 if (string.startsWith("package:")) |
77 string.replace("package:", "/packages/"); | 59 string.replace("package:", "/packages/"); |
78 String library_url_string = StringFromDart(Dart_LibraryUrl(library)); | 60 String library_url_string = StringFromDart(Dart_LibraryUrl(library)); |
79 KURL library_url = KURL(ParsedURLString, library_url_string); | 61 KURL library_url = KURL(ParsedURLString, library_url_string); |
80 KURL resolved_url = KURL(library_url, string); | 62 KURL resolved_url = KURL(library_url, string); |
81 return StringToDart(DartState::Current(), resolved_url.string()); | 63 return StringToDart(DartState::Current(), resolved_url.string()); |
82 } | 64 } |
83 | 65 |
84 } // namespace blink | 66 } // namespace blink |
OLD | NEW |