Index: sky/shell/ui/engine.cc |
diff --git a/sky/shell/ui/engine.cc b/sky/shell/ui/engine.cc |
index 726f1d3c6ef2c8dbc0ad1430ffa640f2a76013a0..6e35f098aaef2ad7e0be9396723519b5250d503b 100644 |
--- a/sky/shell/ui/engine.cc |
+++ b/sky/shell/ui/engine.cc |
@@ -15,6 +15,8 @@ |
#include "sky/engine/public/web/WebSettings.h" |
#include "sky/engine/public/web/WebView.h" |
#include "sky/services/platform/platform_impl.h" |
+#include "sky/shell/dart/dart_library_provider_files.h" |
+#include "sky/shell/dart/dart_library_provider_network.h" |
#include "sky/shell/service_provider.h" |
#include "sky/shell/ui/animator.h" |
#include "sky/shell/ui/input_event_converter.h" |
@@ -184,18 +186,45 @@ void Engine::OnInputEvent(InputEventPtr event) { |
web_view_->handleInputEvent(*web_event); |
} |
-void Engine::LoadURL(const mojo::String& mojo_url) { |
- GURL url(mojo_url); |
- if (!blink::WebView::shouldUseWebView(url)) { |
- if (web_view_) { |
- web_view_->close(); |
- web_view_ = nullptr; |
- } |
- sky_view_ = blink::SkyView::Create(this); |
- sky_view_->Load(url); |
- UpdateSkyViewSize(); |
+void Engine::CloseWebViewIfNeeded() { |
+ if (web_view_) { |
+ web_view_->close(); |
+ web_view_ = nullptr; |
+ } |
+} |
+ |
+void Engine::RunFromLibrary(const mojo::String& name) { |
+ CloseWebViewIfNeeded(); |
+ sky_view_ = blink::SkyView::Create(this); |
+ sky_view_->RunFromLibrary(blink::WebString::fromUTF8(name), |
+ dart_library_provider_.get()); |
+ UpdateSkyViewSize(); |
+} |
+ |
+void Engine::RunFromNetwork(const mojo::String& url) { |
+ if (blink::WebView::shouldUseWebView(GURL(url))) { |
+ LoadUsingWebView(url); |
return; |
} |
+ dart_library_provider_.reset( |
+ new DartLibraryProviderNetwork(g_platform_impl->networkService())); |
+ RunFromLibrary(url); |
+} |
+ |
+void Engine::RunFromFile(const mojo::String& main, |
+ const mojo::String& package_root) { |
+ dart_library_provider_.reset( |
+ new DartLibraryProviderFiles(base::FilePath(package_root))); |
+ RunFromLibrary(main); |
+} |
+ |
+void Engine::RunFromSnapshot(mojo::ScopedDataPipeConsumerHandle snapshot) { |
+ // TODO(abarth): Implement. |
+} |
+ |
+void Engine::LoadUsingWebView(const mojo::String& mojo_url) { |
+ GURL url(mojo_url); |
+ DCHECK(blink::WebView::shouldUseWebView(url)); |
if (sky_view_) |
sky_view_ = nullptr; |
@@ -250,8 +279,9 @@ mojo::NavigatorHost* Engine::NavigatorHost() { |
void Engine::RequestNavigate(mojo::Target target, |
mojo::URLRequestPtr request) { |
// Ignoring target for now. |
- base::MessageLoop::current()->PostTask(FROM_HERE, |
- base::Bind(&Engine::LoadURL, GetWeakPtr(), request->url)); |
+ base::MessageLoop::current()->PostTask( |
+ FROM_HERE, |
+ base::Bind(&Engine::RunFromNetwork, GetWeakPtr(), request->url)); |
} |
void Engine::DidNavigateLocally(const mojo::String& url) { |