1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
|
// Copyright 2012 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_ANDROID_TAB_WEB_CONTENTS_DELEGATE_ANDROID_H_
#define CHROME_BROWSER_ANDROID_TAB_WEB_CONTENTS_DELEGATE_ANDROID_H_
#include <memory>
#include "base/scoped_multi_source_observation.h"
#include "components/embedder_support/android/delegate/web_contents_delegate_android.h"
#include "components/find_in_page/find_result_observer.h"
#include "components/find_in_page/find_tab_helper.h"
#include "components/paint_preview/buildflags/buildflags.h"
#include "printing/buildflags/buildflags.h"
#include "third_party/blink/public/mojom/frame/blocked_navigation_types.mojom.h"
namespace content {
struct FileChooserParams;
class WebContents;
}
namespace gfx {
class Rect;
class RectF;
}
namespace url {
class Origin;
}
namespace android {
// Chromium Android specific WebContentsDelegate.
// Should contain any WebContentsDelegate implementations required by
// the Chromium Android port but not to be shared with WebView.
class TabWebContentsDelegateAndroid
: public web_contents_delegate_android::WebContentsDelegateAndroid,
public find_in_page::FindResultObserver {
public:
TabWebContentsDelegateAndroid(JNIEnv* env,
const jni_zero::JavaRef<jobject>& obj);
TabWebContentsDelegateAndroid(const TabWebContentsDelegateAndroid&) = delete;
TabWebContentsDelegateAndroid& operator=(
const TabWebContentsDelegateAndroid&) = delete;
~TabWebContentsDelegateAndroid() override;
void RunFileChooser(content::RenderFrameHost* render_frame_host,
scoped_refptr<content::FileSelectListener> listener,
const blink::mojom::FileChooserParams& params) override;
void CreateSmsPrompt(content::RenderFrameHost*,
const std::vector<url::Origin>&,
const std::string& one_time_code,
base::OnceClosure on_confirm,
base::OnceClosure on_cancel) override;
bool ShouldFocusLocationBarByDefault(content::WebContents* source) override;
void FindReply(content::WebContents* web_contents,
int request_id,
int number_of_matches,
const gfx::Rect& selection_rect,
int active_match_ordinal,
bool final_update) override;
void FindMatchRectsReply(content::WebContents* web_contents,
int version,
const std::vector<gfx::RectF>& rects,
const gfx::RectF& active_rect) override;
content::JavaScriptDialogManager* GetJavaScriptDialogManager(
content::WebContents* source) override;
void RequestMediaAccessPermission(
content::WebContents* web_contents,
const content::MediaStreamRequest& request,
content::MediaResponseCallback callback) override;
bool CheckMediaAccessPermission(content::RenderFrameHost* render_frame_host,
const url::Origin& security_origin,
blink::mojom::MediaStreamType type) override;
void SetOverlayMode(bool use_overlay_mode) override;
content::WebContents* OpenURLFromTab(
content::WebContents* source,
const content::OpenURLParams& params,
base::OnceCallback<void(content::NavigationHandle&)>
navigation_handle_callback) override;
bool ShouldResumeRequestsForCreatedWindow() override;
content::WebContents* AddNewContents(
content::WebContents* source,
std::unique_ptr<content::WebContents> new_contents,
const GURL& target_url,
WindowOpenDisposition disposition,
const blink::mojom::WindowFeatures& window_features,
bool user_gesture,
bool* was_blocked) override;
void SetContentsBounds(content::WebContents* source,
const gfx::Rect& bounds) override;
void OnDidBlockNavigation(
content::WebContents* web_contents,
const GURL& blocked_url,
blink::mojom::NavigationBlockedReason reason) override;
void UpdateUserGestureCarryoverInfo(
content::WebContents* web_contents) override;
content::PictureInPictureResult EnterPictureInPicture(
content::WebContents* web_contents) override;
void ExitPictureInPicture() override;
bool IsBackForwardCacheSupported(content::WebContents& web_contents) override;
content::PreloadingEligibility IsPrerender2Supported(
content::WebContents& web_contents,
content::PreloadingTriggerType trigger_type) override;
device::mojom::GeolocationContext* GetInstalledWebappGeolocationContext()
override;
#if BUILDFLAG(ENABLE_PRINTING)
void PrintCrossProcessSubframe(
content::WebContents* web_contents,
const gfx::Rect& rect,
int document_cookie,
content::RenderFrameHost* subframe_host) const override;
#endif
#if BUILDFLAG(ENABLE_PAINT_PREVIEW)
void CapturePaintPreviewOfSubframe(
content::WebContents* web_contents,
const gfx::Rect& rect,
const base::UnguessableToken& guid,
content::RenderFrameHost* render_frame_host) override;
#endif
// find_in_page::FindResultObserver:
void OnFindResultAvailable(content::WebContents* web_contents) override;
void OnFindTabHelperDestroyed(find_in_page::FindTabHelper* helper) override;
bool ShouldEnableEmbeddedMediaExperience() const;
bool IsPictureInPictureEnabled() const;
bool IsNightModeEnabled() const;
bool IsForceDarkWebContentEnabled() const;
bool CanShowAppBanners() const;
// Returns true if this tab is currently presented in the context of custom
// tabs. Tabs can be moved between different activities so the returned value
// might change over the lifetime of the tab.
bool IsCustomTab() const;
const GURL GetManifestScope() const;
bool IsInstalledWebappDelegateGeolocation() const;
bool IsModalContextMenu() const;
bool IsDynamicSafeAreaInsetsEnabled() const;
bool OpenInAppOrChromeFromCct(GURL url);
private:
std::unique_ptr<device::mojom::GeolocationContext>
installed_webapp_geolocation_context_;
base::ScopedMultiSourceObservation<find_in_page::FindTabHelper,
find_in_page::FindResultObserver>
find_result_observations_{this};
};
} // namespace android
#endif // CHROME_BROWSER_ANDROID_TAB_WEB_CONTENTS_DELEGATE_ANDROID_H_
|