| 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 |