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 159
|
// 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 COMPONENTS_EMBEDDER_SUPPORT_ANDROID_DELEGATE_WEB_CONTENTS_DELEGATE_ANDROID_H_
#define COMPONENTS_EMBEDDER_SUPPORT_ANDROID_DELEGATE_WEB_CONTENTS_DELEGATE_ANDROID_H_
#include <stdint.h>
#include <memory>
#include "base/android/jni_weak_ref.h"
#include "base/android/scoped_java_ref.h"
#include "base/compiler_specific.h"
#include "content/public/browser/keyboard_event_processing_result.h"
#include "content/public/browser/web_contents_delegate.h"
#include "third_party/blink/public/mojom/frame/blocked_navigation_types.mojom.h"
class GURL;
namespace content {
class WebContents;
class WebContentsDelegate;
class NavigationHandle;
struct NativeWebKeyboardEvent;
struct OpenURLParams;
} // namespace content
namespace web_contents_delegate_android {
enum WebContentsDelegateLogLevel {
// Equivalent of WebCore::WebConsoleMessage::LevelDebug.
WEB_CONTENTS_DELEGATE_LOG_LEVEL_DEBUG = 0,
// Equivalent of WebCore::WebConsoleMessage::LevelLog.
WEB_CONTENTS_DELEGATE_LOG_LEVEL_LOG = 1,
// Equivalent of WebCore::WebConsoleMessage::LevelWarning.
WEB_CONTENTS_DELEGATE_LOG_LEVEL_WARNING = 2,
// Equivalent of WebCore::WebConsoleMessage::LevelError.
WEB_CONTENTS_DELEGATE_LOG_LEVEL_ERROR = 3,
};
// Native underpinnings of WebContentsDelegateAndroid.java. Provides a default
// delegate for WebContents to forward calls to the java peer. The embedding
// application may subclass and override methods on either the C++ or Java side
// as required.
class WebContentsDelegateAndroid : public content::WebContentsDelegate {
public:
WebContentsDelegateAndroid(JNIEnv* env,
const jni_zero::JavaRef<jobject>& obj);
~WebContentsDelegateAndroid() override;
// Overridden from WebContentsDelegate:
content::WebContents* OpenURLFromTab(
content::WebContents* source,
const content::OpenURLParams& params,
base::OnceCallback<void(content::NavigationHandle&)>
navigation_handle_callback) override;
std::unique_ptr<content::ColorChooser> OpenColorChooser(
content::WebContents* source,
SkColor color,
const std::vector<blink::mojom::ColorSuggestionPtr>& suggestions)
override;
void NavigationStateChanged(content::WebContents* source,
content::InvalidateTypes changed_flags) override;
void VisibleSecurityStateChanged(content::WebContents* source) override;
void ActivateContents(content::WebContents* contents) override;
void LoadingStateChanged(content::WebContents* source,
bool should_show_loading_ui) override;
void RendererUnresponsive(
content::WebContents* source,
content::RenderWidgetHost* render_widget_host,
base::RepeatingClosure hang_monitor_restarter) override;
void RendererResponsive(
content::WebContents* source,
content::RenderWidgetHost* render_widget_host) override;
void WebContentsCreated(content::WebContents* source_contents,
int opener_render_process_id,
int opener_render_frame_id,
const std::string& frame_name,
const GURL& target_url,
content::WebContents* new_contents) override;
bool IsWebContentsCreationOverridden(
content::RenderFrameHost* opener,
content::SiteInstance* source_site_instance,
content::mojom::WindowContainerType window_container_type,
const GURL& opener_url,
const std::string& frame_name,
const GURL& target_url) override;
void CloseContents(content::WebContents* source) override;
bool DidAddMessageToConsole(content::WebContents* source,
blink::mojom::ConsoleMessageLevel log_level,
const std::u16string& message,
int32_t line_no,
const std::u16string& source_id) override;
void UpdateTargetURL(content::WebContents* source, const GURL& url) override;
content::KeyboardEventProcessingResult PreHandleKeyboardEvent(
content::WebContents* source,
const input::NativeWebKeyboardEvent& event) override;
bool HandleKeyboardEvent(content::WebContents* source,
const input::NativeWebKeyboardEvent& event) override;
bool TakeFocus(content::WebContents* source, bool reverse) override;
void ShowRepostFormWarningDialog(content::WebContents* source) override;
bool ShouldBlockMediaRequest(const GURL& url) override;
void EnterFullscreenModeForTab(
content::RenderFrameHost* requesting_frame,
const blink::mojom::FullscreenOptions& options) override;
void FullscreenStateChangedForTab(
content::RenderFrameHost* requesting_frame,
const blink::mojom::FullscreenOptions& options) override;
void ExitFullscreenModeForTab(content::WebContents* web_contents) override;
bool IsFullscreenForTabOrPending(
const content::WebContents* web_contents) override;
void RequestPointerLock(content::WebContents* web_contents,
bool user_gesture,
bool last_unlocked_by_target) override;
void OnDidBlockNavigation(
content::WebContents* web_contents,
const GURL& blocked_url,
blink::mojom::NavigationBlockedReason reason) override;
int GetTopControlsHeight() override;
int GetTopControlsMinHeight() override;
int GetBottomControlsHeight() override;
int GetBottomControlsMinHeight() override;
bool ShouldAnimateBrowserControlsHeightChanges() override;
bool DoBrowserControlsShrinkRendererSize(
content::WebContents* contents) override;
int GetVirtualKeyboardHeight(content::WebContents* contents) override;
blink::mojom::DisplayMode GetDisplayMode(
const content::WebContents* web_contents) override;
void DidChangeCloseSignalInterceptStatus() override;
// Return true if the WebContents is presenting a java native view for the
// committed navigation entry. This is possible for chrome* URLs, such as
// an NTP. Callback is guaranteed to be dispatched asynchronously (with an
// empty bitmap if the capture fails) only if this returns true.
bool MaybeCopyContentAreaAsBitmap(
base::OnceCallback<void(const SkBitmap&)> callback) override;
SkBitmap MaybeCopyContentAreaAsBitmapSync() override;
SkBitmap GetBackForwardTransitionFallbackUXInternalPageIcon() override;
void DidBackForwardTransitionAnimationChange() override;
content::BackForwardTransitionAnimationManager::FallbackUXConfig
GetBackForwardTransitionFallbackUXConfig() override;
void ContentsZoomChange(bool zoom_in) override;
protected:
base::android::ScopedJavaLocalRef<jobject> GetJavaDelegate(JNIEnv* env) const;
private:
// We depend on the java side user of WebContentDelegateAndroid to hold a
// strong reference to that object as long as they want to receive callbacks
// on it. Using a weak ref here allows it to be correctly GCed.
JavaObjectWeakGlobalRef weak_java_delegate_;
// Timestamp when the user last successfully escaped from a lock request.
base::TimeTicks pointer_lock_last_user_escape_time_;
};
} // namespace web_contents_delegate_android
#endif // COMPONENTS_EMBEDDER_SUPPORT_ANDROID_DELEGATE_WEB_CONTENTS_DELEGATE_ANDROID_H_
|