Index: sky/engine/public/sky/sky_view.cc |
diff --git a/sky/engine/public/sky/sky_view.cc b/sky/engine/public/sky/sky_view.cc |
index 62455d0994ff7a47172fceb648dc120b42842571..b18677c65e437c8d0151571712d1fba794da721c 100644 |
--- a/sky/engine/public/sky/sky_view.cc |
+++ b/sky/engine/public/sky/sky_view.cc |
@@ -19,18 +19,12 @@ |
namespace blink { |
-class SkyView::Data { |
- public: |
- RefPtr<View> view_; |
-}; |
- |
std::unique_ptr<SkyView> SkyView::Create(SkyViewClient* client) { |
return std::unique_ptr<SkyView>(new SkyView(client)); |
} |
SkyView::SkyView(SkyViewClient* client) |
: client_(client), |
- data_(new Data), |
weak_factory_(this) { |
} |
@@ -43,39 +37,26 @@ SkyView::~SkyView() { |
void SkyView::SetDisplayMetrics(const SkyDisplayMetrics& metrics) { |
display_metrics_ = metrics; |
- data_->view_->setDisplayMetrics(display_metrics_); |
+ view_->setDisplayMetrics(display_metrics_); |
} |
-void SkyView::Load(const WebURL& web_url, mojo::URLResponsePtr response) { |
- KURL url = web_url; |
- |
- data_->view_ = View::create(base::Bind( |
- &SkyView::ScheduleFrame, weak_factory_.GetWeakPtr())); |
- data_->view_->setDisplayMetrics(display_metrics_); |
- |
- dart_controller_.reset(new DartController); |
- dart_controller_->CreateIsolateFor(adoptPtr(new DOMDartState(nullptr, url))); |
- dart_controller_->InstallView(data_->view_.get()); |
- |
- { |
- Dart_Isolate isolate = dart_controller_->dart_state()->isolate(); |
- DartIsolateScope scope(isolate); |
- DartApiScope api_scope; |
- client_->DidCreateIsolate(isolate); |
- } |
+void SkyView::RunFromLibrary(const WebString& name, |
+ DartLibraryProvider* library_provider) { |
+ CreateView(name); |
+ dart_controller_->RunFromLibrary(name, library_provider); |
+} |
- if (url.path().endsWith(".snapshot")) |
- dart_controller_->LoadSnapshot(url, response.Pass()); |
- else |
- dart_controller_->LoadMainLibrary(url, response.Pass()); |
+void SkyView::RunFromSnapshot(const WebString& name, |
+ mojo::ScopedDataPipeConsumerHandle snapshot) { |
+ // TODO(abarth): Implement. |
} |
void SkyView::BeginFrame(base::TimeTicks frame_time) { |
- data_->view_->beginFrame(frame_time); |
+ view_->beginFrame(frame_time); |
} |
skia::RefPtr<SkPicture> SkyView::Paint() { |
- if (Picture* picture = data_->view_->picture()) |
+ if (Picture* picture = view_->picture()) |
return skia::SharePtr(picture->toSkia()); |
return skia::RefPtr<SkPicture>(); |
} |
@@ -85,22 +66,40 @@ void SkyView::HandleInputEvent(const WebInputEvent& inputEvent) { |
if (WebInputEvent::isPointerEventType(inputEvent.type)) { |
const WebPointerEvent& event = static_cast<const WebPointerEvent&>(inputEvent); |
- data_->view_->handleInputEvent(PointerEvent::create(event)); |
+ view_->handleInputEvent(PointerEvent::create(event)); |
} else if (WebInputEvent::isGestureEventType(inputEvent.type)) { |
const WebGestureEvent& event = static_cast<const WebGestureEvent&>(inputEvent); |
- data_->view_->handleInputEvent(GestureEvent::create(event)); |
+ view_->handleInputEvent(GestureEvent::create(event)); |
} else if (WebInputEvent::isKeyboardEventType(inputEvent.type)) { |
const WebKeyboardEvent& event = static_cast<const WebKeyboardEvent&>(inputEvent); |
- data_->view_->handleInputEvent(KeyboardEvent::create(event)); |
+ view_->handleInputEvent(KeyboardEvent::create(event)); |
} else if (WebInputEvent::isWheelEventType(inputEvent.type)) { |
const WebWheelEvent& event = static_cast<const WebWheelEvent&>(inputEvent); |
- data_->view_->handleInputEvent(WheelEvent::create(event)); |
+ view_->handleInputEvent(WheelEvent::create(event)); |
} else if (inputEvent.type == WebInputEvent::Back) { |
- data_->view_->handleInputEvent(Event::create("back")); |
+ view_->handleInputEvent(Event::create("back")); |
} |
} |
+void SkyView::CreateView(const String& name) { |
+ DCHECK(!view_); |
+ DCHECK(!dart_controller_); |
+ |
+ view_ = View::create( |
+ base::Bind(&SkyView::ScheduleFrame, weak_factory_.GetWeakPtr())); |
+ view_->setDisplayMetrics(display_metrics_); |
+ |
+ dart_controller_ = adoptPtr(new DartController); |
+ dart_controller_->CreateIsolateFor(adoptPtr(new DOMDartState(nullptr, name))); |
+ dart_controller_->InstallView(view_.get()); |
+ |
+ Dart_Isolate isolate = dart_controller_->dart_state()->isolate(); |
+ DartIsolateScope scope(isolate); |
+ DartApiScope api_scope; |
+ client_->DidCreateIsolate(isolate); |
+} |
+ |
void SkyView::ScheduleFrame() { |
client_->ScheduleFrame(); |
} |