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

Unified Diff: extensions/browser/api/app_window/app_window_api.cc

Issue 503383002: Allow component IME extension use app.window and add 'ime' window type for app window (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: extensions/browser/api/app_window/app_window_api.cc
diff --git a/extensions/browser/api/app_window/app_window_api.cc b/extensions/browser/api/app_window/app_window_api.cc
index 4201c11ed1ae7a69fd5d991be45f46d4ee73e1ae..c0b2401f3e8b7b4b47833df9e53d42f4cf791f44 100644
--- a/extensions/browser/api/app_window/app_window_api.cc
+++ b/extensions/browser/api/app_window/app_window_api.cc
@@ -24,6 +24,7 @@
#include "extensions/browser/image_util.h"
#include "extensions/common/api/app_window.h"
#include "extensions/common/features/simple_feature.h"
+#include "extensions/common/manifest.h"
#include "extensions/common/permissions/permissions_data.h"
#include "extensions/common/switches.h"
#include "third_party/skia/include/core/SkColor.h"
@@ -58,6 +59,18 @@ const char kAlphaEnabledNeedsFrameNone[] =
"The alphaEnabled option can only be used with \"frame: 'none'\".";
const char kVisibleOnAllWorkspacesWrongChannel[] =
"The visibleOnAllWorkspaces option requires dev channel or newer.";
+const char kImeWindowMissingPermission[] =
+ "Extensions require the \"app.window.ime\" permission to create windows.";
+const char kImeOptionIsNotSupported[] =
+ "The \"ime\" option is not supported for platform app.";
+#if !defined(OS_CHROMEOS)
+const char kImeWindowUnsupportedPlatform[] =
+ "The \"ime\" option can only be used on ChromeOS.";
+#else
+const char kImeOptionMustBeTrueAndNeedsFrameNone[] =
+ "IME extensions must create window with \"ime: true\" and "
+ "\"frame: 'none'\".";
+#endif
} // namespace app_window_constants
const char kNoneFrameOption[] = "none";
@@ -204,6 +217,35 @@ bool AppWindowCreateFunction::RunAsync() {
if (!GetFrameOptions(*options, &create_params))
return false;
+ if (extension()->GetType() == extensions::Manifest::TYPE_EXTENSION) {
+ // Whitelisted IME extensions are allowed to use this API to create IME
+ // specific windows to show accented characters or suggestions.
+ if (!extension()->permissions_data()->HasAPIPermission(
+ APIPermission::kImeWindowEnabled)) {
+ error_ = app_window_constants::kImeWindowMissingPermission;
+ return false;
+ }
+
+#if !defined(OS_CHROMEOS)
+ // IME window is only supported on ChromeOS.
+ error_ = app_window_constants::kImeWindowUnsupportedPlatform;
+ return false;
+#else
+ // IME extensions must create window with "ime: true" and "frame: none".
+ if (!options->ime.get() || !*options->ime.get() ||
+ create_params.frame != AppWindow::FRAME_NONE) {
+ error_ = app_window_constants::kImeOptionMustBeTrueAndNeedsFrameNone;
+ return false;
+ }
+ create_params.is_ime_window = true;
+#endif // OS_CHROMEOS
+ } else {
+ if (options->ime.get()) {
+ error_ = app_window_constants::kImeOptionIsNotSupported;
+ return false;
+ }
+ }
+
if (options->alpha_enabled.get()) {
const char* whitelist[] = {
#if defined(OS_CHROMEOS)

Powered by Google App Engine
This is Rietveld 408576698