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

Side by Side Diff: chrome/browser/accessibility/accessibility_extension_api.cc

Issue 10694085: Refactor extension event distribution to use Values instead of JSON strings. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixing memory leak in a test. Created 8 years, 4 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 | Annotate | Revision Log
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 #include "chrome/browser/accessibility/accessibility_extension_api.h" 5 #include "chrome/browser/accessibility/accessibility_extension_api.h"
6 6
7 #include "base/json/json_writer.h" 7 #include "base/json/json_writer.h"
8 #include "base/string_number_conversions.h" 8 #include "base/string_number_conversions.h"
9 #include "base/values.h" 9 #include "base/values.h"
10 #include "chrome/browser/accessibility/accessibility_extension_api_constants.h" 10 #include "chrome/browser/accessibility/accessibility_extension_api_constants.h"
11 #include "chrome/browser/extensions/api/tabs/tabs_constants.h" 11 #include "chrome/browser/extensions/api/tabs/tabs_constants.h"
12 #include "chrome/browser/extensions/event_router.h" 12 #include "chrome/browser/extensions/event_router.h"
13 #include "chrome/browser/extensions/extension_tab_util.h" 13 #include "chrome/browser/extensions/extension_tab_util.h"
14 #include "chrome/browser/infobars/infobar_delegate.h" 14 #include "chrome/browser/infobars/infobar_delegate.h"
15 #include "chrome/browser/infobars/infobar_tab_helper.h" 15 #include "chrome/browser/infobars/infobar_tab_helper.h"
16 #include "chrome/browser/profiles/profile.h" 16 #include "chrome/browser/profiles/profile.h"
17 #include "chrome/browser/tab_contents/confirm_infobar_delegate.h" 17 #include "chrome/browser/tab_contents/confirm_infobar_delegate.h"
18 #include "chrome/browser/ui/tab_contents/tab_contents.h" 18 #include "chrome/browser/ui/tab_contents/tab_contents.h"
19 #include "chrome/common/chrome_notification_types.h" 19 #include "chrome/common/chrome_notification_types.h"
20 #include "chrome/common/extensions/extension_error_utils.h" 20 #include "chrome/common/extensions/extension_error_utils.h"
21 #include "content/public/browser/notification_service.h" 21 #include "content/public/browser/notification_service.h"
22 22
23 namespace keys = extension_accessibility_api_constants; 23 namespace keys = extension_accessibility_api_constants;
24 24
25 // Returns the AccessibilityControlInfo serialized into a JSON string, 25 // Returns the AccessibilityControlInfo serialized into a JSON string,
26 // consisting of an array of a single object of type AccessibilityObject, 26 // consisting of an array of a single object of type AccessibilityObject,
27 // as defined in the accessibility extension api's json schema. 27 // as defined in the accessibility extension api's json schema.
28 std::string ControlInfoToJsonString(const AccessibilityEventInfo* info) { 28 scoped_ptr<ListValue> ControlInfoToEventArguments(
29 ListValue args; 29 const AccessibilityEventInfo* info) {
30 DictionaryValue* dict = new DictionaryValue(); 30 DictionaryValue* dict = new DictionaryValue();
31 info->SerializeToDict(dict); 31 info->SerializeToDict(dict);
32 args.Append(dict); 32
33 std::string json_args; 33 scoped_ptr<ListValue> args(new ListValue());
34 base::JSONWriter::Write(&args, &json_args); 34 args->Append(dict);
35 return json_args; 35 return args.Pass();
36 } 36 }
37 37
38 ExtensionAccessibilityEventRouter* 38 ExtensionAccessibilityEventRouter*
39 ExtensionAccessibilityEventRouter::GetInstance() { 39 ExtensionAccessibilityEventRouter::GetInstance() {
40 return Singleton<ExtensionAccessibilityEventRouter>::get(); 40 return Singleton<ExtensionAccessibilityEventRouter>::get();
41 } 41 }
42 42
43 ExtensionAccessibilityEventRouter::ExtensionAccessibilityEventRouter() 43 ExtensionAccessibilityEventRouter::ExtensionAccessibilityEventRouter()
44 : enabled_(false) { 44 : enabled_(false) {
45 registrar_.Add(this, 45 registrar_.Add(this,
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 void ExtensionAccessibilityEventRouter::SetAccessibilityEnabled(bool enabled) { 109 void ExtensionAccessibilityEventRouter::SetAccessibilityEnabled(bool enabled) {
110 enabled_ = enabled; 110 enabled_ = enabled;
111 } 111 }
112 112
113 bool ExtensionAccessibilityEventRouter::IsAccessibilityEnabled() const { 113 bool ExtensionAccessibilityEventRouter::IsAccessibilityEnabled() const {
114 return enabled_; 114 return enabled_;
115 } 115 }
116 116
117 void ExtensionAccessibilityEventRouter::OnWindowOpened( 117 void ExtensionAccessibilityEventRouter::OnWindowOpened(
118 const AccessibilityWindowInfo* info) { 118 const AccessibilityWindowInfo* info) {
119 std::string json_args = ControlInfoToJsonString(info); 119 scoped_ptr<ListValue> args(ControlInfoToEventArguments(info));
120 DispatchEvent(info->profile(), keys::kOnWindowOpened, json_args); 120 DispatchEvent(info->profile(), keys::kOnWindowOpened, args.Pass());
121 } 121 }
122 122
123 void ExtensionAccessibilityEventRouter::OnWindowClosed( 123 void ExtensionAccessibilityEventRouter::OnWindowClosed(
124 const AccessibilityWindowInfo* info) { 124 const AccessibilityWindowInfo* info) {
125 std::string json_args = ControlInfoToJsonString(info); 125 scoped_ptr<ListValue> args(ControlInfoToEventArguments(info));
126 DispatchEvent(info->profile(), keys::kOnWindowClosed, json_args); 126 DispatchEvent(info->profile(), keys::kOnWindowClosed, args.Pass());
127 } 127 }
128 128
129 void ExtensionAccessibilityEventRouter::OnControlFocused( 129 void ExtensionAccessibilityEventRouter::OnControlFocused(
130 const AccessibilityControlInfo* info) { 130 const AccessibilityControlInfo* info) {
131 last_focused_control_dict_.Clear(); 131 last_focused_control_dict_.Clear();
132 info->SerializeToDict(&last_focused_control_dict_); 132 info->SerializeToDict(&last_focused_control_dict_);
133 std::string json_args = ControlInfoToJsonString(info); 133 scoped_ptr<ListValue> args(ControlInfoToEventArguments(info));
134 DispatchEvent(info->profile(), keys::kOnControlFocused, json_args); 134 DispatchEvent(info->profile(), keys::kOnControlFocused, args.Pass());
135 } 135 }
136 136
137 void ExtensionAccessibilityEventRouter::OnControlAction( 137 void ExtensionAccessibilityEventRouter::OnControlAction(
138 const AccessibilityControlInfo* info) { 138 const AccessibilityControlInfo* info) {
139 std::string json_args = ControlInfoToJsonString(info); 139 scoped_ptr<ListValue> args(ControlInfoToEventArguments(info));
140 DispatchEvent(info->profile(), keys::kOnControlAction, json_args); 140 DispatchEvent(info->profile(), keys::kOnControlAction, args.Pass());
141 } 141 }
142 142
143 void ExtensionAccessibilityEventRouter::OnTextChanged( 143 void ExtensionAccessibilityEventRouter::OnTextChanged(
144 const AccessibilityControlInfo* info) { 144 const AccessibilityControlInfo* info) {
145 std::string json_args = ControlInfoToJsonString(info); 145 scoped_ptr<ListValue> args(ControlInfoToEventArguments(info));
146 DispatchEvent(info->profile(), keys::kOnTextChanged, json_args); 146 DispatchEvent(info->profile(), keys::kOnTextChanged, args.Pass());
147 } 147 }
148 148
149 void ExtensionAccessibilityEventRouter::OnMenuOpened( 149 void ExtensionAccessibilityEventRouter::OnMenuOpened(
150 const AccessibilityMenuInfo* info) { 150 const AccessibilityMenuInfo* info) {
151 std::string json_args = ControlInfoToJsonString(info); 151 scoped_ptr<ListValue> args(ControlInfoToEventArguments(info));
152 DispatchEvent(info->profile(), keys::kOnMenuOpened, json_args); 152 DispatchEvent(info->profile(), keys::kOnMenuOpened, args.Pass());
153 } 153 }
154 154
155 void ExtensionAccessibilityEventRouter::OnMenuClosed( 155 void ExtensionAccessibilityEventRouter::OnMenuClosed(
156 const AccessibilityMenuInfo* info) { 156 const AccessibilityMenuInfo* info) {
157 std::string json_args = ControlInfoToJsonString(info); 157 scoped_ptr<ListValue> args(ControlInfoToEventArguments(info));
158 DispatchEvent(info->profile(), keys::kOnMenuClosed, json_args); 158 DispatchEvent(info->profile(), keys::kOnMenuClosed, args.Pass());
159 } 159 }
160 160
161 void ExtensionAccessibilityEventRouter::DispatchEvent( 161 void ExtensionAccessibilityEventRouter::DispatchEvent(
162 Profile* profile, 162 Profile* profile,
163 const char* event_name, 163 const char* event_name,
164 const std::string& json_args) { 164 scoped_ptr<base::ListValue> event_args) {
165 if (enabled_ && profile && profile->GetExtensionEventRouter()) { 165 if (enabled_ && profile && profile->GetExtensionEventRouter()) {
166 profile->GetExtensionEventRouter()->DispatchEventToRenderers( 166 profile->GetExtensionEventRouter()->DispatchEventToRenderers(event_name,
167 event_name, json_args, NULL, GURL(), extensions::EventFilteringInfo()); 167 event_args.Pass(), NULL, GURL(), extensions::EventFilteringInfo());
168 } 168 }
169 } 169 }
170 170
171 bool SetAccessibilityEnabledFunction::RunImpl() { 171 bool SetAccessibilityEnabledFunction::RunImpl() {
172 bool enabled; 172 bool enabled;
173 EXTENSION_FUNCTION_VALIDATE(args_->GetBoolean(0, &enabled)); 173 EXTENSION_FUNCTION_VALIDATE(args_->GetBoolean(0, &enabled));
174 ExtensionAccessibilityEventRouter::GetInstance() 174 ExtensionAccessibilityEventRouter::GetInstance()
175 ->SetAccessibilityEnabled(enabled); 175 ->SetAccessibilityEnabled(enabled);
176 return true; 176 return true;
177 } 177 }
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 DictionaryValue* alert_value = new DictionaryValue; 219 DictionaryValue* alert_value = new DictionaryValue;
220 const string16 message_text = confirm_infobar_delegate->GetMessageText(); 220 const string16 message_text = confirm_infobar_delegate->GetMessageText();
221 alert_value->SetString(keys::kMessageKey, message_text); 221 alert_value->SetString(keys::kMessageKey, message_text);
222 alerts_value->Append(alert_value); 222 alerts_value->Append(alert_value);
223 } 223 }
224 } 224 }
225 225
226 SetResult(alerts_value); 226 SetResult(alerts_value);
227 return true; 227 return true;
228 } 228 }
OLDNEW
« no previous file with comments | « chrome/browser/accessibility/accessibility_extension_api.h ('k') | chrome/browser/bookmarks/bookmark_extension_api.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698