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
|
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_WEB_CONTENTS_DELEGATE_ANDROID_WEB_CONTENTS_DELEGATE_ANDROID_H_
#define COMPONENTS_WEB_CONTENTS_DELEGATE_ANDROID_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/web_contents_delegate.h"
class GURL;
namespace content {
class WebContents;
class WebContentsDelegate;
struct NativeWebKeyboardEvent;
struct OpenURLParams;
}
namespace web_contents_delegate_android {
class ValidationMessageBubbleAndroid;
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, jobject obj);
~WebContentsDelegateAndroid() override;
// Binds this WebContentsDelegateAndroid to the passed WebContents instance,
// such that when that WebContents is destroyed, this
// WebContentsDelegateAndroid instance will be destroyed too.
void SetOwnerWebContents(content::WebContents* contents);
// Overridden from WebContentsDelegate:
content::WebContents* OpenURLFromTab(
content::WebContents* source,
const content::OpenURLParams& params) override;
content::ColorChooser* OpenColorChooser(
content::WebContents* source,
SkColor color,
const std::vector<content::ColorSuggestion>& 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 to_different_document) override;
void LoadProgressChanged(content::WebContents* source,
double load_progress) override;
void RendererUnresponsive(
content::WebContents* source,
const content::WebContentsUnresponsiveState& unresponsive_state) override;
void RendererResponsive(content::WebContents* source) 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 ShouldCreateWebContents(
content::WebContents* web_contents,
content::SiteInstance* source_site_instance,
int32_t route_id,
int32_t main_frame_route_id,
int32_t main_frame_widget_route_id,
WindowContainerType window_container_type,
const GURL& opener_url,
const std::string& frame_name,
const GURL& target_url,
const std::string& partition_id,
content::SessionStorageNamespace* session_storage_namespace) override;
bool OnGoToEntryOffset(int offset) override;
void CloseContents(content::WebContents* source) override;
void MoveContents(content::WebContents* source,
const gfx::Rect& pos) override;
bool DidAddMessageToConsole(content::WebContents* source,
int32_t level,
const base::string16& message,
int32_t line_no,
const base::string16& source_id) override;
void UpdateTargetURL(content::WebContents* source, const GURL& url) override;
void HandleKeyboardEvent(
content::WebContents* source,
const content::NativeWebKeyboardEvent& event) override;
bool TakeFocus(content::WebContents* source, bool reverse) override;
void ShowRepostFormWarningDialog(content::WebContents* source) override;
base::android::ScopedJavaLocalRef<jobject>
GetContentVideoViewEmbedder() override;
bool ShouldBlockMediaRequest(const GURL& url) override;
void EnterFullscreenModeForTab(content::WebContents* web_contents,
const GURL& origin) override;
void ExitFullscreenModeForTab(content::WebContents* web_contents) override;
bool IsFullscreenForTabOrPending(
const content::WebContents* web_contents) const override;
void ShowValidationMessage(content::WebContents* web_contents,
const gfx::Rect& anchor_in_root_view,
const base::string16& main_text,
const base::string16& sub_text) override;
void HideValidationMessage(content::WebContents* web_contents) override;
void MoveValidationMessage(content::WebContents* web_contents,
const gfx::Rect& anchor_in_root_view) override;
void RequestAppBannerFromDevTools(
content::WebContents* web_contents) 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_;
std::unique_ptr<ValidationMessageBubbleAndroid> validation_message_bubble_;
};
} // namespace web_contents_delegate_android
#endif // COMPONENTS_WEB_CONTENTS_DELEGATE_ANDROID_WEB_CONTENTS_DELEGATE_ANDROID_H_
|