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

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

Issue 2813953002: Add HeadlessTabSocket (Closed)
Patch Set: Change HeadlessTabSocketImpl::SetListener 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() &
35 content::BindingsPolicy::BINDINGS_POLICY_HEADLESS)) {
36 return;
37 }
38
39 render_frame->ExecuteJavaScript(base::UTF8ToUTF16(R"(
40 (function() {
41 let tabSocket = null;
42 let messagesToSend = [];
43
44 function getNextEmbedderMessage() {
45 tabSocket.awaitNextMessageFromEmbedder().then(
46 function(result) {
47 window.TabSocket.onmessage(new CustomEvent(
48 "onmessage", {detail : {message : result.message}}));
49 getNextEmbedderMessage();
50 });
51 };
52
53 window.TabSocket = new Proxy(
54 {
55 send: function(message) {
56 if (tabSocket) {
57 tabSocket.sendMessageToEmbedder(message);
58 } else {
59 messagesToSend.push(message);
60 }
61 },
62 onmessage: null
63 },
64 {
65 set: function(target, prop, value, receiver) {
66 if (prop !== "onmessage")
67 return false;
68 target[prop] = value;
69 if (tabSocket)
70 getNextEmbedderMessage();
71 return true;
72 }
73 });
74
75 // Note define() defines a module in the mojo module dependency
76 // system. While we don't expose our module, the callback below only
77 // fires after the requested modules have been loaded.
78 define([
79 'headless/lib/tab_socket.mojom',
80 'content/public/renderer/frame_interfaces',
81 ], function(tabSocketMojom, frameInterfaces) {
82 tabSocket = new tabSocketMojom.TabSocketPtr(
83 frameInterfaces.getInterface(tabSocketMojom.TabSocket.name));
84 // Send any messages that may have been created before the dependency
85 // was resolved.
86 for (var i = 0; i < messagesToSend.length; i++) {
87 tabSocket.sendMessageToEmbedder(messagesToSend[i]);
88 }
89 messagesToSend = [];
90 if (window.TabSocket.onmessage)
91 getNextEmbedderMessage();
92 });
93
94 })(); )"));
95 }
96
29 } // namespace headless 97 } // namespace headless
OLDNEW
« no previous file with comments | « headless/lib/renderer/headless_content_renderer_client.h ('k') | headless/lib/resources/headless_lib_resources.grd » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698