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

Side by Side Diff: content/renderer/dom_automation_controller.h

Issue 2503453003: Remove all calls to domAutomationController.setAutomationId.
Patch Set: Fix nacl_browsertest_util.cc Created 3 years, 5 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 #ifndef CONTENT_RENDERER_DOM_AUTOMATION_CONTROLLER_H_ 5 #ifndef CONTENT_RENDERER_DOM_AUTOMATION_CONTROLLER_H_
6 #define CONTENT_RENDERER_DOM_AUTOMATION_CONTROLLER_H_ 6 #define CONTENT_RENDERER_DOM_AUTOMATION_CONTROLLER_H_
7 7
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include "base/macros.h" 10 #include "base/macros.h"
11 #include "content/public/renderer/render_frame_observer.h" 11 #include "content/public/renderer/render_frame_observer.h"
12 #include "gin/wrappable.h" 12 #include "gin/wrappable.h"
13 13
14 /* DomAutomationController class:
15 Bound to Javascript window.domAutomationController object.
16 At the very basic, this object makes any native value (string, numbers,
17 boolean) from javascript available to the automation host in Cpp.
18 Any renderer implementation that is built with this binding will allow the
19 above facility.
20 The intended use of this object is to expose the DOM Objects and their
21 attributes to the automation host.
22
23 A typical usage would be like following (JS code):
24
25 var object = document.getElementById('some_id');
26 window.domAutomationController.send(object.nodeName); // get the tag name
27
28 For the exact mode of usage,
29 refer AutomationProxyTest.*DomAutomationController tests.
30
31 The class provides a single send method that can send variety of native
32 javascript values. (NPString, Number(double), Boolean)
33
34 The actual communication occurs in the following manner:
35
36 TEST MASTER RENDERER
37 (1) (3)
38 |AProxy| ----->|AProvider|----->|RenderView|------|
39 /\ | | |
40 | | | |
41 |(6) |(2) |(0) |(4)
42 | | \/ |
43 | |-------->|DAController|<----|
44 | |
45 | |(5)
46 |-------|WebContentsImpl|<--------|
47
48
49 Legends:
50 - AProxy = AutomationProxy
51 - AProvider = AutomationProvider
52 - DAController = DomAutomationController
53
54 (0) Initialization step where DAController is bound to the renderer
55 and the view_id of the renderer is supplied to the DAController for
56 routing message in (5).
57 (1) A 'javascript:' url is sent from the test process to master as an IPC
58 message. A unique routing id is generated at this stage (automation_id_)
59 (2) The automation_id_ of step (1) is supplied to DAController by calling
60 the bound method setAutomationId(). This is required for routing message
61 in (6).
62 (3) The 'javascript:' url is sent for execution by calling into
63 Browser::LoadURL()
64 (4) A callback is generated as a result of domAutomationController.send()
65 into Cpp. The supplied value is received as a result of this callback.
66 (5) The value received in (4) is sent to the master along with the
67 stored automation_id_ as an IPC message. The frame_'s RenderFrameImpl is
68 used to route the message. (IPC messages, ViewHostMsg_*DomAutomation* )
69 (6) The value and the automation_id_ is extracted out of the message received
70 in (5). This value is relayed to AProxy using another IPC message.
71 automation_id_ is used to route the message.
72 (IPC messages, AutomationMsg_Dom*Response)
73
74 */
75
76 namespace blink { 14 namespace blink {
77 class WebLocalFrame; 15 class WebLocalFrame;
78 } 16 }
79 17
80 namespace gin { 18 namespace gin {
81 class Arguments; 19 class Arguments;
82 } 20 }
83 21
84 namespace content { 22 namespace content {
85 23
86 class RenderFrame; 24 class RenderFrame;
87 25
26 // Provides implementation of window.domAutomationController javascript object.
27 // Javascript can call domAutomationController.send(...) to send arbitrary data
28 // to the browser. On the browser side, the data is received via one of the
29 // following:
30 // - Product code:
31 // - Explicit handlers of FrameHostMsg_DomOperationResponse IPC
32 // - Test code:
33 // - DOMMessageQueue class
34 // - ExecuteScriptAndExtractInt/Bool/String functions
88 class DomAutomationController : public gin::Wrappable<DomAutomationController>, 35 class DomAutomationController : public gin::Wrappable<DomAutomationController>,
89 public RenderFrameObserver { 36 public RenderFrameObserver {
90 public: 37 public:
91 static gin::WrapperInfo kWrapperInfo; 38 static gin::WrapperInfo kWrapperInfo;
92 39
93 static void Install(RenderFrame* render_frame, blink::WebLocalFrame* frame); 40 static void Install(RenderFrame* render_frame, blink::WebLocalFrame* frame);
94 41
95 // Makes the renderer send a javascript value to the app. 42 // Makes the renderer send a javascript value to the app.
96 // The value to be sent can be either of type String, 43 // The value to be sent can be either of type String,
97 // Number (double casted to int32_t) or Boolean. Any other type or no 44 // Number (double casted to int32_t) or Boolean. Any other type or no
98 // argument at all is ignored. 45 // argument at all is ignored.
99 bool SendMsg(const gin::Arguments& args); 46 bool SendMsg(const gin::Arguments& args);
100 47
101 // Makes the renderer send a javascript value to the app. 48 // Makes the renderer send a javascript value to the app.
102 // The value should be properly formed JSON. 49 // The value should be properly formed JSON.
103 bool SendJSON(const std::string& json); 50 bool SendJSON(const std::string& json);
104 51
105 // Sends a string with a provided Automation Id.
106 bool SendWithId(int automation_id, const std::string& str);
107
108 bool SetAutomationId(int automation_id);
109
110 private: 52 private:
111 explicit DomAutomationController(RenderFrame* render_view); 53 explicit DomAutomationController(RenderFrame* render_view);
112 ~DomAutomationController() override; 54 ~DomAutomationController() override;
113 55
114 // gin::WrappableBase 56 // gin::WrappableBase
115 gin::ObjectTemplateBuilder GetObjectTemplateBuilder( 57 gin::ObjectTemplateBuilder GetObjectTemplateBuilder(
116 v8::Isolate* isolate) override; 58 v8::Isolate* isolate) override;
117 59
118 // RenderFrameObserver 60 // RenderFrameObserver
119 void OnDestruct() override; 61 void OnDestruct() override;
120 void DidCreateScriptContext(v8::Local<v8::Context> context, 62 void DidCreateScriptContext(v8::Local<v8::Context> context,
121 int world_id) override; 63 int world_id) override;
122 64
123 DISALLOW_COPY_AND_ASSIGN(DomAutomationController); 65 DISALLOW_COPY_AND_ASSIGN(DomAutomationController);
124 }; 66 };
125 67
126 } // namespace content 68 } // namespace content
127 69
128 #endif // CONTENT_RENDERER_DOM_AUTOMATION_CONTROLLER_H_ 70 #endif // CONTENT_RENDERER_DOM_AUTOMATION_CONTROLLER_H_
OLDNEW
« no previous file with comments | « content/public/test/browser_test_utils.cc ('k') | content/renderer/dom_automation_controller.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698