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

Side by Side Diff: headless/lib/renderer/headless_content_renderer_client.cc

Issue 2813953002: Add HeadlessTabSocket (Closed)
Patch Set: Fix release build test Created 3 years, 8 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
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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 "headless/lib/renderer/headless_content_renderer_client.h" 5 #include "headless/lib/renderer/headless_content_renderer_client.h"
6 6
7 #include "base/memory/ptr_util.h" 7 #include "base/memory/ptr_util.h"
8 #include "base/strings/utf_string_conversions.h"
9 #include "content/public/common/bindings_policy.h"
10 #include "content/public/renderer/render_frame.h"
8 #include "printing/features/features.h" 11 #include "printing/features/features.h"
9 12
10 #if BUILDFLAG(ENABLE_BASIC_PRINTING) 13 #if BUILDFLAG(ENABLE_BASIC_PRINTING)
11 #include "components/printing/renderer/print_web_view_helper.h" 14 #include "components/printing/renderer/print_web_view_helper.h"
12 #include "headless/lib/renderer/headless_print_web_view_helper_delegate.h" 15 #include "headless/lib/renderer/headless_print_web_view_helper_delegate.h"
13 #endif 16 #endif
14 17
15 namespace headless { 18 namespace headless {
16 19
17 HeadlessContentRendererClient::HeadlessContentRendererClient() {} 20 HeadlessContentRendererClient::HeadlessContentRendererClient() {}
18 21
19 HeadlessContentRendererClient::~HeadlessContentRendererClient() {} 22 HeadlessContentRendererClient::~HeadlessContentRendererClient() {}
20 23
21 void HeadlessContentRendererClient::RenderFrameCreated( 24 void HeadlessContentRendererClient::RenderFrameCreated(
22 content::RenderFrame* render_frame) { 25 content::RenderFrame* render_frame) {
23 #if BUILDFLAG(ENABLE_BASIC_PRINTING) 26 #if BUILDFLAG(ENABLE_BASIC_PRINTING)
24 new printing::PrintWebViewHelper( 27 new printing::PrintWebViewHelper(
25 render_frame, base::MakeUnique<HeadlessPrintWebViewHelperDelegate>()); 28 render_frame, base::MakeUnique<HeadlessPrintWebViewHelperDelegate>());
26 #endif 29 #endif
27 } 30 }
28 31
32 void HeadlessContentRendererClient::RunScriptsAtDocumentStart(
33 content::RenderFrame* render_frame) {
34 if (render_frame->GetEnabledBindings() &
Sami 2017/04/12 14:18:46 nit: Could be an early out to reduce the indentati
alex clarke (OOO till 29th) 2017/04/12 15:47:46 Done.
35 content::BindingsPolicy::BINDINGS_POLICY_HEADLESS) {
36 render_frame->ExecuteJavaScript(base::UTF8ToUTF16(R"(
37 (function() {
38 let tabSocket_ = null;
39 let messages_to_send_ = [];
Sami 2017/04/12 14:18:46 nit: messagesToSend
alex clarke (OOO till 29th) 2017/04/12 15:47:46 Done.
40 let listener_ = null;
41
42 function getNextEmbedderMessage() {
43 tabSocket_.awaitNextMessageFromEmbedder().then(
44 function(result) {
45 listener_(result.message);
46 getNextEmbedderMessage();
47 });
48 };
49
50 window.TabSocket = {};
51 window.TabSocket.SendMessageToEmbedder = function(message) {
Sami 2017/04/12 14:18:46 Maybe this should just also be send() to match Web
alex clarke (OOO till 29th) 2017/04/12 15:47:46 Done.
52 if (tabSocket_) {
53 tabSocket_.sendMessageToEmbedder(message);
54 } else {
55 messages_to_send_.push(message);
56 }
57 };
58
59 window.TabSocket.SetListener = function(listener) {
Sami 2017/04/12 14:18:46 Could we make the caller set "TabSocket.onmessage
alex clarke (OOO till 29th) 2017/04/12 15:47:46 Done.
60 listener_ = listener;
61 if (tabSocket_)
62 getNextEmbedderMessage();
63 };
64
65 // Note define() defines a module in the mojo module dependency
66 // system. While we don't expose our module, the callback below only
67 // fires after the requested modules have been loaded.
68 define([
69 'headless/lib/tab_socket.mojom',
70 'content/public/renderer/frame_interfaces',
71 ], function(tabSocketMojom, frameInterfaces) {
72 tabSocket_ = new tabSocketMojom.TabSocketPtr(
73 frameInterfaces.getInterface(tabSocketMojom.TabSocket.name));
74 // Send any messages that may have been created before the dependency
75 // was resolved.
76 for (var i = 0; i < messages_to_send_.length; i++) {
77 tabSocket_.sendMessageToEmbedder(messages_to_send_[i]);
78 }
79 messages_to_send_ = [];
80 if (listener_)
81 getNextEmbedderMessage();
82 });
83
84 })(); )"));
85 }
86 }
87
29 } // namespace headless 88 } // namespace headless
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698