Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(992)

Side by Side Diff: headless/lib/headless_web_contents_impl.cc

Issue 1674263002: headless: Initial headless embedder API implementation (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added navigation test. Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "headless/lib/headless_web_contents_impl.h"
6
7 #include "base/bind.h"
8 #include "base/memory/weak_ptr.h"
9 #include "base/trace_event/trace_event.h"
10 #include "content/public/browser/render_frame_host.h"
11 #include "content/public/browser/render_process_host.h"
12 #include "content/public/browser/render_view_host.h"
13 #include "content/public/browser/render_widget_host_view.h"
14 #include "content/public/browser/web_contents.h"
15 #include "content/public/browser/web_contents_delegate.h"
16 #include "content/public/browser/web_contents_observer.h"
17 #include "content/public/common/bindings_policy.h"
18 #include "content/public/common/service_registry.h"
19 #include "content/public/renderer/render_frame.h"
20 #include "headless/public/headless_web_frame.h"
21 #include "ui/aura/env.h"
22 #include "ui/aura/window.h"
23 #include "ui/aura/window_tree_host.h"
24
25 namespace headless {
26
27 class HeadlessWebContentsImpl::Delegate : public content::WebContentsDelegate {
28 };
29
30 HeadlessWebContentsImpl::HeadlessWebContentsImpl(
31 content::BrowserContext* browser_context,
32 const gfx::Size& initial_size)
33 : web_contents_delegate_(new HeadlessWebContentsImpl::Delegate()) {
34 content::WebContents::CreateParams create_params(browser_context, nullptr);
35 create_params.initial_size = initial_size;
36
37 web_contents_.reset(content::WebContents::Create(create_params));
38 web_contents_->SetDelegate(web_contents_delegate_.get());
39
40 DCHECK(aura::Env::GetInstance());
41 window_tree_host_.reset(
42 aura::WindowTreeHost::Create(gfx::Rect(initial_size)));
43 window_tree_host_->InitHost();
44
45 aura::Window* contents = web_contents_->GetNativeView();
46 aura::Window* parent = window_tree_host_->window();
47
48 if (!parent->Contains(contents)) {
49 parent->AddChild(contents);
50 contents->Show();
51 }
52
53 contents->SetBounds(gfx::Rect(initial_size));
54 content::RenderWidgetHostView* host_view =
55 web_contents_->GetRenderWidgetHostView();
56 if (host_view)
57 host_view->SetSize(initial_size);
58 }
59
60 HeadlessWebContentsImpl::~HeadlessWebContentsImpl() {
61 web_contents_->Close();
62 }
63
64 HeadlessWebFrame* HeadlessWebContentsImpl::GetMainFrame() {
65 // TODO(skyostil): Create a RenderFrame for the renderer thread.
66 NOTIMPLEMENTED();
67 return nullptr;
68 }
69
70 void HeadlessWebContentsImpl::OpenURL(const GURL& url) {
71 content::NavigationController::LoadURLParams params(url);
72 params.transition_type = ui::PageTransitionFromInt(
73 ui::PAGE_TRANSITION_TYPED | ui::PAGE_TRANSITION_FROM_ADDRESS_BAR);
74 web_contents_->GetController().LoadURLWithParams(params);
75 web_contents_->Focus();
76 }
77
78 void HeadlessWebContentsImpl::TakeScreenshot(
79 const ScreenshotCallback& callback) {
80 NOTIMPLEMENTED();
81 }
82
83 content::WebContents* HeadlessWebContentsImpl::web_contents() {
84 return web_contents_.get();
85 }
86
87 HeadlessWebContents::Settings* HeadlessWebContentsImpl::GetSettings() {
88 NOTIMPLEMENTED();
89 return nullptr;
90 }
91
92 const HeadlessWebContents::Settings* HeadlessWebContentsImpl::GetSettings()
93 const {
94 NOTIMPLEMENTED();
95 return nullptr;
96 }
97
98 content::NavigationController* HeadlessWebContentsImpl::GetController() {
99 NOTIMPLEMENTED();
100 return nullptr;
101 }
102
103 const content::NavigationController* HeadlessWebContentsImpl::GetController()
104 const {
105 NOTIMPLEMENTED();
106 return nullptr;
107 }
108
109 std::string HeadlessWebContentsImpl::GetTitle() const {
110 NOTIMPLEMENTED();
111 return std::string();
112 }
113
114 const GURL& HeadlessWebContentsImpl::GetVisibleURL() const {
115 return web_contents_->GetVisibleURL();
116 }
117
118 const GURL& HeadlessWebContentsImpl::GetLastCommittedURL() const {
119 return web_contents_->GetLastCommittedURL();
120 }
121
122 bool HeadlessWebContentsImpl::IsLoading() const {
123 NOTIMPLEMENTED();
124 return false;
125 }
126
127 class HeadlessWebContents::Observer::ObserverImpl
128 : public content::WebContentsObserver {
129 public:
130 ObserverImpl(content::WebContents* web_contents,
131 HeadlessWebContents::Observer* observer)
132 : content::WebContentsObserver(web_contents), observer_(observer) {}
133 ObserverImpl(HeadlessWebContents::Observer* observer) : observer_(observer) {}
134
135 ~ObserverImpl() override {}
136
137 void ObserveWebContents(content::WebContents* web_contents) {
138 DCHECK(!this->web_contents());
139 Observe(web_contents);
140 }
141
142 void DocumentOnLoadCompletedInMainFrame() override {
143 observer_->DocumentOnLoadCompletedInMainFrame();
144 }
145
146 private:
147 HeadlessWebContents::Observer* observer_;
148 };
149
150 HeadlessWebContents::Observer::Observer(HeadlessWebContents* web_contents)
151 : observer_(new HeadlessWebContents::Observer::ObserverImpl(
152 static_cast<HeadlessWebContentsImpl*>(web_contents)->web_contents(),
153 this)) {}
154
155 HeadlessWebContents::Observer::Observer()
156 : observer_(new HeadlessWebContents::Observer::ObserverImpl(this)) {}
157
158 HeadlessWebContents::Observer::~Observer() {}
159
160 void HeadlessWebContents::Observer::Observe(HeadlessWebContents* web_contents) {
161 observer_->ObserveWebContents(
162 static_cast<HeadlessWebContentsImpl*>(web_contents)->web_contents());
163 }
164
165 } // namespace headless
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698