Index: chrome/browser/extensions/extension_input_api.cc |
diff --git a/chrome/browser/extensions/extension_input_api.cc b/chrome/browser/extensions/extension_input_api.cc |
index ffcd6594505e0498fe6807c978e2c119f986944b..82df0db3a97e3f5c5e36d559d35ba9bd2ccce41c 100644 |
--- a/chrome/browser/extensions/extension_input_api.cc |
+++ b/chrome/browser/extensions/extension_input_api.cc |
@@ -16,6 +16,11 @@ |
#include "views/ime/input_method.h" |
#include "views/widget/widget.h" |
+#if defined(OS_CHROMEOS) && defined(TOUCH_UI) |
+#include "chrome/browser/chromeos/cros/cros_library.h" |
+#include "chrome/browser/chromeos/cros/input_method_library.h" |
+#endif |
+ |
namespace { |
// Keys. |
@@ -35,6 +40,9 @@ const char kUnknownOrUnsupportedKeyIdentiferError[] = "Unknown or unsupported " |
const char kUnsupportedModifier[] = "Unsupported modifier."; |
const char kNoValidRecipientError[] = "No valid recipient for event."; |
const char kKeyEventUnprocessedError[] = "Event was not handled."; |
+#if defined(OS_CHROMEOS) && defined(TOUCH_UI) |
+const char kCrosLibraryNotLoadedError[] = "Cros shared library not loaded."; |
+#endif |
ui::EventType GetTypeFromString(const std::string& type) { |
if (type == kKeyDown) { |
@@ -116,3 +124,48 @@ bool SendKeyboardEventInputFunction::RunImpl() { |
return true; |
} |
+ |
+#if defined(OS_CHROMEOS) && defined(TOUCH_UI) |
+// TODO(yusukes): This part should be moved to extension_input_api_chromeos.cc. |
+bool SendHandwritingStrokeFunction::RunImpl() { |
+ chromeos::CrosLibrary* cros_library = chromeos::CrosLibrary::Get(); |
+ if (!cros_library->EnsureLoaded()) { |
+ error_ = kCrosLibraryNotLoadedError; |
+ return false; |
+ } |
+ |
+ // TODO(yusukes): Add a parameter for an input context ID. |
+ ListValue* value = NULL; |
+ EXTENSION_FUNCTION_VALIDATE(args_->GetList(0, &value)); |
+ |
+ chromeos::HandwritingStroke stroke; |
+ for (size_t i = 0; i < value->GetSize(); ++i) { |
+ DictionaryValue* dict; |
+ double x = 0.0; |
+ double y = 0.0; |
+ EXTENSION_FUNCTION_VALIDATE(value->GetDictionary(i, &dict)); |
+ EXTENSION_FUNCTION_VALIDATE(dict->GetDouble("x", &x)); |
+ EXTENSION_FUNCTION_VALIDATE(dict->GetDouble("y", &y)); |
+ stroke.push_back(std::make_pair(x, y)); |
+ } |
+ cros_library->GetInputMethodLibrary()->SendHandwritingStroke(stroke); |
+ return true; |
+} |
+ |
+bool CancelHandwritingStrokesFunction::RunImpl() { |
+ chromeos::CrosLibrary* cros_library = chromeos::CrosLibrary::Get(); |
+ if (!cros_library->EnsureLoaded()) { |
+ error_ = kCrosLibraryNotLoadedError; |
+ return false; |
+ } |
+ |
+ // TODO(yusukes): Add a parameter for an input context ID. |
+ int stroke_count = 0; // zero means 'clear all strokes'. |
+ if (HasOptionalArgument(0)) { |
+ EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &stroke_count)); |
+ EXTENSION_FUNCTION_VALIDATE(stroke_count >= 0); |
+ } |
+ cros_library->GetInputMethodLibrary()->CancelHandwritingStrokes(stroke_count); |
+ return true; |
+} |
+#endif |