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.
5 #include "chrome/browser/android/fullscreen/fullscreen_infobar_delegate.h"
7 #include "base/android/jni_string.h"
8 #include "base/memory/scoped_ptr.h"
9 #include "base/prefs/pref_service.h"
10 #include "chrome/browser/android/tab_android.h"
11 #include "chrome/browser/infobars/infobar_service.h"
12 #include "chrome/browser/profiles/profile_manager.h"
13 #include "chrome/common/pref_names.h"
14 #include "chrome/grit/generated_resources.h"
15 #include "components/infobars/core/infobar.h"
16 #include "grit/components_strings.h"
17 #include "grit/theme_resources.h"
18 #include "jni/FullscreenInfoBarDelegate_jni.h"
19 #include "net/base/net_util.h"
20 #include "ui/base/l10n/l10n_util.h"
24 jlong
LaunchFullscreenInfoBar(
25 JNIEnv
* env
, jobject obj
, jobject tab
) {
26 TabAndroid
* tab_android
= TabAndroid::GetNativeTab(env
, tab
);
27 GURL origin
= tab_android
->GetURL().GetOrigin();
28 FullscreenInfoBarDelegate
* delegate
= new FullscreenInfoBarDelegate(
30 InfoBarService
* infobar_service
=
31 InfoBarService::FromWebContents(tab_android
->web_contents());
32 infobar_service
->AddInfoBar(
33 infobar_service
->CreateConfirmInfoBar(make_scoped_ptr(delegate
)));
34 return reinterpret_cast<intptr_t>(delegate
);
37 bool FullscreenInfoBarDelegate::RegisterFullscreenInfoBarDelegate(JNIEnv
* env
) {
38 return RegisterNativesImpl(env
);
41 FullscreenInfoBarDelegate::FullscreenInfoBarDelegate(
42 JNIEnv
* env
, jobject obj
, GURL origin
)
44 j_delegate_
.Reset(env
, obj
);
47 FullscreenInfoBarDelegate::~FullscreenInfoBarDelegate() {
48 if (!j_delegate_
.is_null()) {
49 Java_FullscreenInfoBarDelegate_onInfoBarDismissed(
50 base::android::AttachCurrentThread(), j_delegate_
.obj());
54 void FullscreenInfoBarDelegate::CloseFullscreenInfoBar(
55 JNIEnv
* env
, jobject obj
, jobject tab
) {
57 TabAndroid
* tab_android
= TabAndroid::GetNativeTab(env
, tab
);
58 InfoBarService::FromWebContents(tab_android
->web_contents())->RemoveInfoBar(
62 int FullscreenInfoBarDelegate::GetIconID() const {
63 return IDR_INFOBAR_FULLSCREEN
;
66 base::string16
FullscreenInfoBarDelegate::GetMessageText() const {
68 ProfileManager::GetActiveUserProfile()->GetOriginalProfile();
69 std::string language
=
70 profile
->GetPrefs()->GetString(prefs::kAcceptLanguages
);
71 return l10n_util::GetStringFUTF16(
72 IDS_FULLSCREEN_INFOBAR_TEXT
, net::FormatUrl(GURL(origin_
), language
));
75 base::string16
FullscreenInfoBarDelegate::GetButtonLabel(
76 InfoBarButton button
) const {
77 return l10n_util::GetStringUTF16((button
== BUTTON_OK
) ?
78 IDS_FULLSCREEN_INFOBAR_ALLOW_BUTTON
:
79 IDS_FULLSCREEN_INFOBAR_EXIT_FULLSCREEN_BUTTON
);
82 bool FullscreenInfoBarDelegate::Accept() {
83 JNIEnv
* env
= base::android::AttachCurrentThread();
84 ScopedJavaLocalRef
<jstring
> j_origin
=
85 base::android::ConvertUTF8ToJavaString(env
, origin_
.spec());
86 Java_FullscreenInfoBarDelegate_onFullscreenAllowed(
87 env
, j_delegate_
.obj(), j_origin
.obj());
91 bool FullscreenInfoBarDelegate::Cancel() {
92 Java_FullscreenInfoBarDelegate_onFullscreenCancelled(
93 base::android::AttachCurrentThread(), j_delegate_
.obj());