Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / components / web_contents_delegate_android / color_chooser_android.cc
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
3 // found in the LICENSE file.
4
5 #include "components/web_contents_delegate_android/color_chooser_android.h"
6
7 #include "base/android/jni_array.h"
8 #include "base/android/jni_string.h"
9 #include "content/public/browser/android/content_view_core.h"
10 #include "content/public/browser/web_contents.h"
11 #include "content/public/common/color_suggestion.h"
12 #include "jni/ColorChooserAndroid_jni.h"
13
14 using base::android::ConvertUTF16ToJavaString;
15
16 namespace web_contents_delegate_android {
17
18 ColorChooserAndroid::ColorChooserAndroid(
19     content::WebContents* web_contents,
20     SkColor initial_color,
21     const std::vector<content::ColorSuggestion>& suggestions)
22     : web_contents_(web_contents) {
23   JNIEnv* env = AttachCurrentThread();
24   content::ContentViewCore* content_view_core =
25       content::ContentViewCore::FromWebContents(web_contents);
26   DCHECK(content_view_core);
27
28   ScopedJavaLocalRef<jobjectArray> suggestions_array;
29
30   if (suggestions.size() > 0) {
31     suggestions_array = Java_ColorChooserAndroid_createColorSuggestionArray(
32         env, suggestions.size());
33
34     for (size_t i = 0; i < suggestions.size(); ++i) {
35       const content::ColorSuggestion& suggestion = suggestions[i];
36       ScopedJavaLocalRef<jstring> label = ConvertUTF16ToJavaString(
37           env, suggestion.label);
38       Java_ColorChooserAndroid_addToColorSuggestionArray(
39           env,
40           suggestions_array.obj(),
41           i,
42           suggestion.color,
43           label.obj());
44     }
45   }
46   j_color_chooser_.Reset(Java_ColorChooserAndroid_createColorChooserAndroid(
47       env,
48       reinterpret_cast<intptr_t>(this),
49       content_view_core->GetJavaObject().obj(),
50       initial_color,
51       suggestions_array.obj()));
52 }
53
54 ColorChooserAndroid::~ColorChooserAndroid() {
55 }
56
57 void ColorChooserAndroid::End() {
58   if (!j_color_chooser_.is_null()) {
59     JNIEnv* env = AttachCurrentThread();
60     Java_ColorChooserAndroid_closeColorChooser(env, j_color_chooser_.obj());
61   }
62 }
63
64 void ColorChooserAndroid::SetSelectedColor(SkColor color) {
65   // Not implemented since the color is set on the java side only, in theory
66   // it can be set from JS which would override the user selection but
67   // we don't support that for now.
68 }
69
70 void ColorChooserAndroid::OnColorChosen(JNIEnv* env, jobject obj, jint color) {
71   web_contents_->DidChooseColorInColorChooser(color);
72   web_contents_->DidEndColorChooser();
73 }
74
75 // ----------------------------------------------------------------------------
76 // Native JNI methods
77 // ----------------------------------------------------------------------------
78 bool RegisterColorChooserAndroid(JNIEnv* env) {
79   return RegisterNativesImpl(env);
80 }
81
82 }  // namespace web_contents_delegate_android