Make SkyView vs. WebView controlable via url path

We're currently in a transition between using main.sky and main.dart
files as our main() entry point for Sky applications.

This CL makes this runtime controlable by path name.  If it finds
a .dart in the path name it will use SkyView, otherwise it will
fall back to the existing WebView codepath.

SkyView does not expose a window object and much of the existing
Sky Engine is not initialized when main() is run.  Clients should
be transitioning away from main.sky towards main.dart in the near
future, however main.dart is probably not ready for general
consumption at this point.

R=ianh@google.com

Review URL: https://codereview.chromium.org/1152313002
This commit is contained in:
Eric Seidel 2015-05-22 12:59:21 -07:00
parent 0928b28f0d
commit 8aa3caf350
4 changed files with 31 additions and 7 deletions

View File

@ -37,6 +37,8 @@
#include "sky/engine/public/web/WebPageVisibilityState.h"
#include "sky/engine/public/web/WebWidget.h"
class GURL;
namespace blink {
class WebFrame;
@ -48,6 +50,9 @@ struct WebPoint;
class WebView : public WebWidget {
public:
// I've added this here so that it dies when WebView does. :)
static bool shouldUseWebView(const GURL& url);
// Initialization ------------------------------------------------------
// Creates a WebView that is NOT yet initialized. You will need to

View File

@ -83,6 +83,7 @@
#include "sky/engine/wtf/CurrentTime.h"
#include "sky/engine/wtf/RefPtr.h"
#include "sky/engine/wtf/TemporaryChange.h"
#include "url/gurl.h"
// Get rid of WTF's pow define so we can use std::pow.
#undef pow
@ -92,6 +93,20 @@ namespace blink {
// WebView ----------------------------------------------------------------
bool WebView::shouldUseWebView(const GURL& url)
{
std::string filename = url.ExtractFileName();
int hashStart = filename.find('#');
if (hashStart != -1)
filename.resize(hashStart);
int queryStart = filename.find('?');
if (queryStart != -1)
filename.resize(queryStart);
// For now .dart indicates we should use SkyView. Eventually we'll
// use SkyView for all urls regardless of file extension.
return !EndsWith(filename, ".dart", false);
}
WebView* WebView::create(WebViewClient* client)
{
// Pass the WebViewImpl's self-reference to the caller.

View File

@ -171,13 +171,14 @@ void Engine::OnInputEvent(InputEventPtr event) {
}
void Engine::LoadURL(const mojo::String& url) {
// Enable SkyView here.
if (false) {
if (!WebView::shouldUseWebView(responseURL)) {
sky_view_ = blink::SkyView::Create(this);
sky_view_->Load(GURL(url));
return;
}
LOG(WARNING) << ".sky support is deprecated, please use .dart for main()";
// Something bad happens if you try to call WebView::close and replace
// the webview. So for now we just load into the existing one. :/
if (!web_view_)

View File

@ -158,21 +158,24 @@ void DocumentView::OnEmbed(
void DocumentView::OnViewManagerDisconnected(mojo::ViewManager* view_manager) {
// TODO(aa): Need to figure out how shutdown works.
}
void DocumentView::Load(mojo::URLResponsePtr response) {
// Enable SkyView here.
if (false) {
GURL responseURL(response->url);
if (!blink::WebView::shouldUseWebView(responseURL)) {
sky_view_ = blink::SkyView::Create(this);
initializeLayerTreeView();
sky_view_->Load(GURL(response->url), response.Pass());
sky_view_->Load(responseURL, response.Pass());
return;
}
if (!RuntimeFlags::Get().testing())
LOG(WARNING) << ".sky support is deprecated, please use .dart for main()";
web_view_ = blink::WebView::create(this);
ConfigureSettings(web_view_->settings());
web_view_->setMainFrame(blink::WebLocalFrame::create(this));
web_view_->mainFrame()->loadFromDataPipeWithURL(
response->body.Pass(), GURL(response->url));
response->body.Pass(), responseURL);
}
void DocumentView::initializeLayerTreeView() {