| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "mojo/examples/html_viewer/blink_platform_impl.h" |
| 6 #include "mojo/examples/html_viewer/html_document_view.h" |
| 5 #include "mojo/public/cpp/application/application.h" | 7 #include "mojo/public/cpp/application/application.h" |
| 6 #include "mojo/services/public/cpp/view_manager/node.h" | 8 #include "mojo/services/public/cpp/view_manager/node.h" |
| 7 #include "mojo/services/public/cpp/view_manager/types.h" | 9 #include "mojo/services/public/cpp/view_manager/types.h" |
| 8 #include "mojo/services/public/cpp/view_manager/view.h" | 10 #include "mojo/services/public/cpp/view_manager/view.h" |
| 9 #include "mojo/services/public/cpp/view_manager/view_manager.h" | 11 #include "mojo/services/public/cpp/view_manager/view_manager.h" |
| 10 #include "mojo/services/public/cpp/view_manager/view_manager_delegate.h" | 12 #include "mojo/services/public/cpp/view_manager/view_manager_delegate.h" |
| 11 #include "mojo/services/public/interfaces/navigation/navigation.mojom.h" | 13 #include "mojo/services/public/interfaces/navigation/navigation.mojom.h" |
| 14 #include "third_party/WebKit/public/web/WebKit.h" |
| 12 | 15 |
| 13 namespace mojo { | 16 namespace mojo { |
| 14 namespace examples { | 17 namespace examples { |
| 15 | 18 |
| 16 class HTMLViewer; | 19 class HTMLViewer; |
| 17 | 20 |
| 18 class NavigatorImpl : public InterfaceImpl<navigation::Navigator> { | 21 class NavigatorImpl : public InterfaceImpl<navigation::Navigator> { |
| 19 public: | 22 public: |
| 20 explicit NavigatorImpl(HTMLViewer* viewer) : viewer_(viewer) {} | 23 explicit NavigatorImpl(HTMLViewer* viewer) : viewer_(viewer) {} |
| 21 virtual ~NavigatorImpl() {} | 24 virtual ~NavigatorImpl() {} |
| 22 | 25 |
| 23 private: | 26 private: |
| 24 // Overridden from navigation::Navigator: | 27 // Overridden from navigation::Navigator: |
| 25 virtual void Navigate( | 28 virtual void Navigate( |
| 26 uint32_t node_id, | 29 uint32_t node_id, |
| 27 navigation::NavigationDetailsPtr navigation_details, | 30 navigation::NavigationDetailsPtr navigation_details, |
| 28 navigation::ResponseDetailsPtr response_details) OVERRIDE { | 31 navigation::ResponseDetailsPtr response_details) OVERRIDE; |
| 29 printf("In HTMLViewer, rendering url: %s\n", | |
| 30 response_details->response->url.data()); | |
| 31 printf("HTML: \n"); | |
| 32 for (;;) { | |
| 33 char buf[512]; | |
| 34 uint32_t num_bytes = sizeof(buf); | |
| 35 MojoResult result = ReadDataRaw( | |
| 36 response_details->response_body_stream.get(), | |
| 37 buf, | |
| 38 &num_bytes, | |
| 39 MOJO_READ_DATA_FLAG_NONE); | |
| 40 if (result == MOJO_RESULT_SHOULD_WAIT) { | |
| 41 Wait(response_details->response_body_stream.get(), | |
| 42 MOJO_HANDLE_SIGNAL_READABLE, | |
| 43 MOJO_DEADLINE_INDEFINITE); | |
| 44 } else if (result == MOJO_RESULT_OK) { | |
| 45 fwrite(buf, num_bytes, 1, stdout); | |
| 46 } else { | |
| 47 break; | |
| 48 } | |
| 49 } | |
| 50 printf("\n>>>> EOF <<<<\n\n"); | |
| 51 | |
| 52 UpdateView(); | |
| 53 } | |
| 54 | |
| 55 void UpdateView(); | |
| 56 | 32 |
| 57 HTMLViewer* viewer_; | 33 HTMLViewer* viewer_; |
| 58 | 34 |
| 59 DISALLOW_COPY_AND_ASSIGN(NavigatorImpl); | 35 DISALLOW_COPY_AND_ASSIGN(NavigatorImpl); |
| 60 }; | 36 }; |
| 61 | 37 |
| 62 class HTMLViewer : public Application, | 38 class HTMLViewer : public Application, |
| 63 public view_manager::ViewManagerDelegate { | 39 public view_manager::ViewManagerDelegate { |
| 64 public: | 40 public: |
| 65 HTMLViewer() : content_view_(NULL) {} | 41 HTMLViewer() : document_view_(NULL) { |
| 66 virtual ~HTMLViewer() {} | 42 } |
| 43 virtual ~HTMLViewer() { |
| 44 blink::shutdown(); |
| 45 } |
| 46 |
| 47 void Load(URLResponsePtr response, |
| 48 ScopedDataPipeConsumerHandle response_body_stream) { |
| 49 // Need to wait for OnRootAdded. |
| 50 response_ = response.Pass(); |
| 51 response_body_stream_ = response_body_stream.Pass(); |
| 52 MaybeLoad(); |
| 53 } |
| 67 | 54 |
| 68 private: | 55 private: |
| 69 friend class NavigatorImpl; | |
| 70 | |
| 71 // Overridden from Application: | 56 // Overridden from Application: |
| 72 virtual void Initialize() OVERRIDE { | 57 virtual void Initialize() OVERRIDE { |
| 58 blink_platform_impl_.reset(new BlinkPlatformImpl(this)); |
| 59 blink::initialize(blink_platform_impl_.get()); |
| 60 |
| 73 AddService<NavigatorImpl>(this); | 61 AddService<NavigatorImpl>(this); |
| 74 view_manager::ViewManager::Create(this, this); | 62 view_manager::ViewManager::Create(this, this); |
| 75 } | 63 } |
| 76 | 64 |
| 77 // Overridden from view_manager::ViewManagerDelegate: | 65 // Overridden from view_manager::ViewManagerDelegate: |
| 78 virtual void OnRootAdded(view_manager::ViewManager* view_manager, | 66 virtual void OnRootAdded(view_manager::ViewManager* view_manager, |
| 79 view_manager::Node* root) OVERRIDE { | 67 view_manager::Node* root) OVERRIDE { |
| 80 content_view_ = view_manager::View::Create(view_manager); | 68 document_view_ = new HTMLDocumentView(view_manager); |
| 81 root->SetActiveView(content_view_); | 69 document_view_->AttachToNode(root); |
| 82 content_view_->SetColor(SK_ColorRED); | 70 MaybeLoad(); |
| 83 } | 71 } |
| 84 | 72 |
| 85 view_manager::View* content_view_; | 73 void MaybeLoad() { |
| 74 if (document_view_ && response_.get()) |
| 75 document_view_->Load(response_.Pass(), response_body_stream_.Pass()); |
| 76 } |
| 77 |
| 78 scoped_ptr<BlinkPlatformImpl> blink_platform_impl_; |
| 79 |
| 80 // TODO(darin): Figure out proper ownership of this instance. |
| 81 HTMLDocumentView* document_view_; |
| 82 URLResponsePtr response_; |
| 83 ScopedDataPipeConsumerHandle response_body_stream_; |
| 86 | 84 |
| 87 DISALLOW_COPY_AND_ASSIGN(HTMLViewer); | 85 DISALLOW_COPY_AND_ASSIGN(HTMLViewer); |
| 88 }; | 86 }; |
| 89 | 87 |
| 90 void NavigatorImpl::UpdateView() { | 88 void NavigatorImpl::Navigate( |
| 91 viewer_->content_view_->SetColor(SK_ColorGREEN); | 89 uint32_t node_id, |
| 90 navigation::NavigationDetailsPtr navigation_details, |
| 91 navigation::ResponseDetailsPtr response_details) { |
| 92 printf("In HTMLViewer, rendering url: %s\n", |
| 93 response_details->response->url.data()); |
| 94 viewer_->Load(response_details->response.Pass(), |
| 95 response_details->response_body_stream.Pass()); |
| 92 } | 96 } |
| 93 | 97 |
| 94 } | 98 } |
| 95 | 99 |
| 96 // static | 100 // static |
| 97 Application* Application::Create() { | 101 Application* Application::Create() { |
| 98 return new examples::HTMLViewer; | 102 return new examples::HTMLViewer; |
| 99 } | 103 } |
| 100 | 104 |
| 101 } | 105 } |
| OLD | NEW |