| // Copyright 2022 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_PERMISSIONS_PERMISSION_BLOCKED_DIALOG_CONTROLLER_ANDROID_H_ |
| #define CHROME_BROWSER_PERMISSIONS_PERMISSION_BLOCKED_DIALOG_CONTROLLER_ANDROID_H_ |
| |
| #include <jni.h> |
| |
| #include "base/android/scoped_java_ref.h" |
| #include "base/memory/raw_ptr.h" |
| #include "chrome/browser/permissions/quiet_permission_prompt_model_android.h" |
| #include "components/content_settings/core/common/content_settings_types.h" |
| #include "components/permissions/permission_ui_selector.h" |
| |
| namespace content { |
| class WebContents; |
| } |
| |
| // Controller for dialog triggered by the user clicking on the "manage" |
| // button in the Messages 2.0 flavor of quiet notification permission |
| // prompt (see: NotificationBlockedMessageDelegate). |
| class PermissionBlockedDialogController { |
| public: |
| // The implementor of this interface may destroy the |
| // `NotificationBlockedDialogController` instance immediately in |
| // these callbacks. |
| class Delegate { |
| public: |
| virtual void OnContinueBlocking() = 0; |
| virtual void OnAllowForThisSite() = 0; |
| virtual void OnLearnMoreClicked() = 0; |
| virtual void OnOpenedSettings() = 0; |
| virtual void OnDialogDismissed() = 0; |
| virtual ContentSettingsType GetContentSettingsType() = 0; |
| }; |
| |
| // Both the `delegate` and `web_contents` should outlive `this`. |
| PermissionBlockedDialogController(Delegate* delegate, |
| content::WebContents* web_contents_); |
| ~PermissionBlockedDialogController(); |
| |
| void ShowDialog( |
| permissions::PermissionUiSelector::QuietUiReason quiet_ui_reason); |
| void DismissDialog(); |
| |
| void OnPrimaryButtonClicked(JNIEnv* env); |
| void OnNegativeButtonClicked(JNIEnv* env); |
| void OnLearnMoreClicked(JNIEnv* env); |
| void OnDialogDismissed(JNIEnv* env); |
| |
| private: |
| // Returns either the fully initialized java counterpart of this bridge or |
| // a is_null() reference if the creation failed. By using this method, the |
| // bridge will try to recreate the java object if it failed previously (e.g. |
| // because there was no native window available). |
| base::android::ScopedJavaGlobalRef<jobject> GetOrCreateJavaObject(); |
| |
| raw_ptr<Delegate> delegate_ = nullptr; |
| raw_ptr<content::WebContents> web_contents_ = nullptr; |
| QuietPermissionPromptModelAndroid prompt_model_; |
| |
| // The corresponding java object. |
| base::android::ScopedJavaGlobalRef<jobject> java_object_; |
| }; |
| |
| #endif // CHROME_BROWSER_PERMISSIONS_PERMISSION_BLOCKED_DIALOG_CONTROLLER_ANDROID_H_ |