tab_modal_dialog_view_android.h 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. // Copyright 2017 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. #ifndef COMPONENTS_JAVASCRIPT_DIALOGS_ANDROID_TAB_MODAL_DIALOG_VIEW_ANDROID_H_
  5. #define COMPONENTS_JAVASCRIPT_DIALOGS_ANDROID_TAB_MODAL_DIALOG_VIEW_ANDROID_H_
  6. #include <memory>
  7. #include "base/android/jni_weak_ref.h"
  8. #include "base/android/scoped_java_ref.h"
  9. #include "base/callback.h"
  10. #include "base/memory/weak_ptr.h"
  11. #include "components/javascript_dialogs/tab_modal_dialog_view.h"
  12. #include "content/public/browser/javascript_dialog_manager.h"
  13. namespace javascript_dialogs {
  14. // An Android version of a JavaScript dialog that automatically dismisses itself
  15. // when the user switches away to a different tab, used for WebContentses that
  16. // are browser tabs.
  17. class TabModalDialogViewAndroid : public TabModalDialogView {
  18. public:
  19. TabModalDialogViewAndroid(const TabModalDialogViewAndroid&) = delete;
  20. TabModalDialogViewAndroid& operator=(const TabModalDialogViewAndroid&) =
  21. delete;
  22. ~TabModalDialogViewAndroid() override;
  23. static base::WeakPtr<TabModalDialogViewAndroid> Create(
  24. content::WebContents* parent_web_contents,
  25. content::WebContents* alerting_web_contents,
  26. const std::u16string& title,
  27. content::JavaScriptDialogType dialog_type,
  28. const std::u16string& message_text,
  29. const std::u16string& default_prompt_text,
  30. content::JavaScriptDialogManager::DialogClosedCallback
  31. callback_on_button_clicked,
  32. base::OnceClosure callback_on_cancelled);
  33. // TabModalDialogView:
  34. void CloseDialogWithoutCallback() override;
  35. std::u16string GetUserInput() override;
  36. void Accept(JNIEnv* env,
  37. const base::android::JavaParamRef<jobject>&,
  38. const base::android::JavaParamRef<jstring>& prompt);
  39. void Cancel(JNIEnv* env,
  40. const base::android::JavaParamRef<jobject>&,
  41. jboolean button_clicked);
  42. private:
  43. TabModalDialogViewAndroid(
  44. content::WebContents* parent_web_contents,
  45. content::WebContents* alerting_web_contents,
  46. const std::u16string& title,
  47. content::JavaScriptDialogType dialog_type,
  48. const std::u16string& message_text,
  49. const std::u16string& default_prompt_text,
  50. content::JavaScriptDialogManager::DialogClosedCallback
  51. callback_on_button_clicked,
  52. base::OnceClosure callback_on_cancelled);
  53. std::unique_ptr<TabModalDialogViewAndroid> dialog_;
  54. base::android::ScopedJavaGlobalRef<jobject> dialog_jobject_;
  55. JavaObjectWeakGlobalRef jwindow_weak_ref_;
  56. content::JavaScriptDialogManager::DialogClosedCallback
  57. callback_on_button_clicked_;
  58. base::OnceClosure callback_on_cancelled_;
  59. base::WeakPtrFactory<TabModalDialogViewAndroid> weak_factory_{this};
  60. };
  61. } // namespace javascript_dialogs
  62. #endif // COMPONENTS_JAVASCRIPT_DIALOGS_ANDROID_TAB_MODAL_DIALOG_VIEW_ANDROID_H_