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

Side by Side Diff: chrome/browser/chromeos/accessibility/spoken_feedback_event_rewriter.cc

Issue 1185753008: Proposed alternative for supporting ChromeVox keyboard commands. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 6 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 "chrome/browser/chromeos/accessibility/spoken_feedback_event_rewriter.h "
6
7 #include <string>
8
9 #include "base/values.h"
10 #include "chrome/browser/browser_process.h"
11 #include "chrome/browser/chromeos/accessibility/accessibility_manager.h"
12 #include "chrome/browser/profiles/profile_manager.h"
13 #include "chrome/common/extensions/api/commands/commands_handler.h"
14 #include "chrome/common/extensions/extension_constants.h"
15 #include "extensions/browser/event_router.h"
16 #include "extensions/browser/extension_registry.h"
17 #include "ui/events/event.h"
18
19 bool SpokenFeedbackEventRewriterDelegate::IsSpokenFeedbackEnabled() const {
20 return true;
21 }
22
23 bool SpokenFeedbackEventRewriterDelegate::DispatchKeyToChromeVox(
24 ui::KeyEvent key_event) {
25 if (!g_browser_process->profile_manager())
26 return false;
27
28 content::BrowserContext* context =
29 g_browser_process->profile_manager()->GetLastUsedProfile();
30
31 const extensions::Extension* extension =
32 extensions::ExtensionRegistry::Get(context)->enabled_extensions().GetByID(
33 extension_misc::kChromeVoxExtensionId);
34 if (!extension)
35 return false;
36
37 extensions::EventRouter* event_router = extensions::EventRouter::Get(context);
38 if (!event_router->ExtensionHasEventListener(
39 extension_misc::kChromeVoxExtensionId, "commands.onCommand"))
40 return false;
41
42 const extensions::CommandMap* commands =
43 extensions::CommandsInfo::GetNamedCommands(extension);
44 if (!commands)
45 return false;
46
47 int modifiers = key_event.flags() & ui::EF_ALL_MODIFIERS;
48 std::string command_name;
49 for (extensions::CommandMap::const_iterator iter = commands->begin();
50 iter != commands->end(); ++iter) {
51 int command_modifiers =
52 iter->second.accelerator().modifiers() & ui::EF_ALL_MODIFIERS;
53 if (iter->second.accelerator().key_code() == key_event.key_code() &&
54 command_modifiers == modifiers)
55 command_name = iter->second.command_name();
56 }
57
58 if (command_name.empty())
59 return false;
60
61 scoped_ptr<base::ListValue> args(new base::ListValue());
62 args->Append(new base::StringValue(command_name));
63
64 scoped_ptr<extensions::Event> extension_event(
65 new extensions::Event("commands.onCommand", args.Pass()));
66 extension_event->restrict_to_browser_context = context;
67
68 event_router->DispatchEventToExtension(extension_misc::kChromeVoxExtensionId,
69 extension_event.Pass());
70
71 return true;
72 }
73
74 SpokenFeedbackEventRewriter::SpokenFeedbackEventRewriter(
75 SpokenFeedbackEventRewriterDelegate* delegate)
76 : delegate_(delegate) {
77 if (!delegate_)
78 delegate_ = &default_delegate_;
79 }
80
81 SpokenFeedbackEventRewriter::~SpokenFeedbackEventRewriter() {
82 }
83
84 ui::EventRewriteStatus SpokenFeedbackEventRewriter::RewriteEvent(
85 const ui::Event& event,
86 scoped_ptr<ui::Event>* new_event) {
87 if (!delegate_->IsSpokenFeedbackEnabled())
88 return ui::EVENT_REWRITE_CONTINUE;
89
90 if ((event.type() != ui::ET_KEY_PRESSED &&
91 event.type() != ui::ET_KEY_RELEASED))
92 return ui::EVENT_REWRITE_CONTINUE;
93
94 const ui::KeyEvent key_event = static_cast<const ui::KeyEvent&>(event);
95 if (event.type() == ui::ET_KEY_RELEASED) {
96 std::vector<int>::iterator it =
97 std::find(captured_key_codes_.begin(), captured_key_codes_.end(),
98 key_event.key_code());
99 if (it != captured_key_codes_.end()) {
100 captured_key_codes_.erase(it);
101 return ui::EVENT_REWRITE_DISCARD;
102 }
103 return ui::EVENT_REWRITE_CONTINUE;
104 }
105
106 if (delegate_->DispatchKeyToChromeVox(key_event)) {
107 captured_key_codes_.push_back(key_event.key_code());
108 return ui::EVENT_REWRITE_DISCARD;
109 }
110 return ui::EVENT_REWRITE_CONTINUE;
111 }
112
113 ui::EventRewriteStatus SpokenFeedbackEventRewriter::NextDispatchEvent(
114 const ui::Event& last_event,
115 scoped_ptr<ui::Event>* new_event) {
116 return ui::EVENT_REWRITE_CONTINUE;
117 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698