1// Copyright 2014 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/ui/android/toolbar/toolbar_model_android.h"
6
7#include "base/android/jni_string.h"
8#include "chrome/browser/profiles/profile.h"
9#include "chrome/browser/search/search.h"
10#include "chrome/browser/search_engines/ui_thread_search_terms_data.h"
11#include "chrome/browser/ui/toolbar/toolbar_model_impl.h"
12#include "content/public/browser/web_contents.h"
13#include "jni/ToolbarModel_jni.h"
14
15using base::android::ScopedJavaLocalRef;
16
17ToolbarModelAndroid::ToolbarModelAndroid(JNIEnv* env, jobject jdelegate)
18    : toolbar_model_(new ToolbarModelImpl(this)),
19      weak_java_delegate_(env, jdelegate) {
20}
21
22ToolbarModelAndroid::~ToolbarModelAndroid() {
23}
24
25void ToolbarModelAndroid::Destroy(JNIEnv* env, jobject obj) {
26  delete this;
27}
28
29ScopedJavaLocalRef<jstring> ToolbarModelAndroid::GetText(JNIEnv* env,
30                                                         jobject obj) {
31  return base::android::ConvertUTF16ToJavaString(env,
32                                                 toolbar_model_->GetText());
33}
34
35ScopedJavaLocalRef<jstring> ToolbarModelAndroid::GetQueryExtractionParam(
36    JNIEnv* env,
37    jobject obj) {
38  content::WebContents* web_contents = GetActiveWebContents();
39  if (!web_contents)
40    return ScopedJavaLocalRef<jstring>();
41  Profile* profile =
42      Profile::FromBrowserContext(web_contents->GetBrowserContext());
43  UIThreadSearchTermsData search_terms_data(profile);
44  return base::android::ConvertUTF8ToJavaString(
45      env, chrome::InstantExtendedEnabledParam(true));
46}
47
48ScopedJavaLocalRef<jstring> ToolbarModelAndroid::GetCorpusChipText(
49    JNIEnv* env,
50    jobject obj) {
51  return base::android::ConvertUTF16ToJavaString(
52      env,
53      toolbar_model_->GetCorpusNameForMobile());
54}
55
56content::WebContents* ToolbarModelAndroid::GetActiveWebContents() const {
57  JNIEnv* env = base::android::AttachCurrentThread();
58  ScopedJavaLocalRef<jobject> jdelegate = weak_java_delegate_.get(env);
59  if (!jdelegate.obj())
60    return NULL;
61  ScopedJavaLocalRef<jobject> jweb_contents =
62      Java_ToolbarModelDelegate_getActiveWebContents(env, jdelegate.obj());
63  return content::WebContents::FromJavaWebContents(jweb_contents.obj());
64}
65
66bool ToolbarModelAndroid::InTabbedBrowser() const {
67  return true;
68}
69
70// static
71bool ToolbarModelAndroid::RegisterToolbarModelAndroid(JNIEnv* env) {
72  return RegisterNativesImpl(env);
73}
74
75// static
76jlong Init(JNIEnv* env, jobject obj, jobject delegate) {
77  ToolbarModelAndroid* toolbar_model = new ToolbarModelAndroid(env, delegate);
78  return reinterpret_cast<intptr_t>(toolbar_model);
79}
80