diff options
author | jknotten@chromium.org <jknotten@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-14 14:05:14 +0000 |
---|---|---|
committer | jknotten@chromium.org <jknotten@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-14 14:05:14 +0000 |
commit | 9a34490644388470d021aa043683f2a8dd5876f4 (patch) | |
tree | 6f9d4011aa4a692191d8d761b64e383aca01190f /content | |
parent | 9d611ca0375cf3594423fa8571a30ed356e568f6 (diff) | |
download | chromium_src-9a34490644388470d021aa043683f2a8dd5876f4.zip chromium_src-9a34490644388470d021aa043683f2a8dd5876f4.tar.gz chromium_src-9a34490644388470d021aa043683f2a8dd5876f4.tar.bz2 |
Move WebContentsDelegateAndroid to content/components
1. Move chrome/browser/component/web_contents_delegate_android to
content/components/web_contents_delegate_android.
2. Rename package org.chromium.chrome.browser.component.
web_contents_delegate_android to org.chromium.content.components.
web_contents_delegate_android.
3. Remove shouldOverrideUrlLoading from WebContentsDelegateAndroid
interface, which is no longer required.
I will follow up with a second change to completely remove
chrome/browser/component/web_contents_delegate_android once
external dependencies on it have been removed.
BUG=157575
Review URL: https://chromiumcodereview.appspot.com/11365199
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@167670 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
10 files changed, 661 insertions, 0 deletions
diff --git a/content/OWNERS b/content/OWNERS index 83b284e..7e62dafb 100644 --- a/content/OWNERS +++ b/content/OWNERS @@ -7,6 +7,7 @@ piman@chromium.org per-file content_components_navigation_interception.gypi=jknotten@chromium.org per-file content_components_navigation_interception.gypi=joth@chromium.org per-file content_components_navigation_interception.gypi=mkosiba@chromium.org +per-file content_components_web_contents_delegate_android.gypi=joth@chromium.org per-file content_jni.gypi=bulach@chromium.org per-file content_jni.gypi=yfriedman@chromium.org per-file content_shell.gypi=jochen@chromium.org diff --git a/content/components/web_contents_delegate_android/DEPS b/content/components/web_contents_delegate_android/DEPS new file mode 100644 index 0000000..471d9e0 --- /dev/null +++ b/content/components/web_contents_delegate_android/DEPS @@ -0,0 +1,4 @@ +include_rules = [ + "+content/public/android/java", + "+content/public/browser" +] diff --git a/content/components/web_contents_delegate_android/OWNERS b/content/components/web_contents_delegate_android/OWNERS new file mode 100644 index 0000000..f9dca5c --- /dev/null +++ b/content/components/web_contents_delegate_android/OWNERS @@ -0,0 +1 @@ +joth@chromium.org diff --git a/content/components/web_contents_delegate_android/component_jni_registrar.cc b/content/components/web_contents_delegate_android/component_jni_registrar.cc new file mode 100644 index 0000000..333d7bc --- /dev/null +++ b/content/components/web_contents_delegate_android/component_jni_registrar.cc @@ -0,0 +1,23 @@ +// 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. + +#include "content/components/web_contents_delegate_android/component_jni_registrar.h" + +#include "base/android/jni_android.h" +#include "base/android/jni_registrar.h" +#include "content/components/web_contents_delegate_android/web_contents_delegate_android.h" + +namespace content { + +static base::android::RegistrationMethod kComponentRegisteredMethods[] = { + { "WebContentsDelegateAndroid", RegisterWebContentsDelegateAndroid }, +}; + +bool RegisterWebContentsDelegateAndroidJni(JNIEnv* env) { + return RegisterNativeMethods(env, + kComponentRegisteredMethods, arraysize(kComponentRegisteredMethods)); +} + +} // namespace content + diff --git a/content/components/web_contents_delegate_android/component_jni_registrar.h b/content/components/web_contents_delegate_android/component_jni_registrar.h new file mode 100644 index 0000000..ee476b3 --- /dev/null +++ b/content/components/web_contents_delegate_android/component_jni_registrar.h @@ -0,0 +1,19 @@ +// 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 CHROME_BROWSER_COMPONENT_WEB_CONTENTS_DELEGATE_ANDROID_COMPONENT_JNI_REGISTRAR_H_ +#define CHROME_BROWSER_COMPONENT_WEB_CONTENTS_DELEGATE_ANDROID_COMPONENT_JNI_REGISTRAR_H_ + +#include <jni.h> + +namespace content { + +// Register all JNI bindings necessary for the web_contents_delegate_android +// component. +bool RegisterWebContentsDelegateAndroidJni(JNIEnv* env); + +} // namespace content + +#endif // CHROME_BROWSER_COMPONENT_WEB_CONTENTS_DELEGATE_ANDROID_COMPONENT_JNI_REGISTRAR_H_ + diff --git a/content/components/web_contents_delegate_android/java/src/org/chromium/content/components/web_contents_delegate_android/WebContentsDelegateAndroid.java b/content/components/web_contents_delegate_android/java/src/org/chromium/content/components/web_contents_delegate_android/WebContentsDelegateAndroid.java new file mode 100644 index 0000000..1fc4687 --- /dev/null +++ b/content/components/web_contents_delegate_android/java/src/org/chromium/content/components/web_contents_delegate_android/WebContentsDelegateAndroid.java @@ -0,0 +1,122 @@ +// 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. + +package org.chromium.content.components.web_contents_delegate_android; + +import android.graphics.Rect; +import android.view.KeyEvent; + +import org.chromium.base.CalledByNative; +import org.chromium.base.JNINamespace; +import org.chromium.content.browser.ContentViewCore; + +/** + * Java peer of the native class of the same name. + */ +@JNINamespace("content") +public class WebContentsDelegateAndroid { + + // Equivalent of WebCore::WebConsoleMessage::LevelTip. + public static final int LOG_LEVEL_TIP = 0; + // Equivalent of WebCore::WebConsoleMessage::LevelLog. + public static final int LOG_LEVEL_LOG = 1; + // Equivalent of WebCore::WebConsoleMessage::LevelWarning. + public static final int LOG_LEVEL_WARNING = 2; + // Equivalent of WebCore::WebConsoleMessage::LevelError. + public static final int LOG_LEVEL_ERROR = 3; + // The most recent load progress callback received from WebContents, as a percentage. + // Initialize to 100 to indicate that we're not in a loading state. + private int mMostRecentProgress = 100; + + public int getMostRecentProgress() { + return mMostRecentProgress; + } + + @CalledByNative + public void openNewTab(String url, boolean incognito) { + } + + @CalledByNative + public boolean addNewContents(int nativeSourceWebContents, int nativeWebContents, + int disposition, Rect initialPosition, boolean userGesture) { + return false; + } + + @CalledByNative + public void closeContents() { + } + + @CalledByNative + public void onUrlStarredChanged(boolean starred) { + } + + @CalledByNative + public void onLoadStarted() { + } + + @CalledByNative + public void onLoadStopped() { + } + + @CalledByNative + public void onTitleUpdated() { + } + + @SuppressWarnings("unused") + @CalledByNative + private final void onLoadProgressChanged(double progress) { + mMostRecentProgress = (int) (100.0 * progress); + onLoadProgressChanged(mMostRecentProgress); + } + + public void onLoadProgressChanged(int progress) { + } + + @CalledByNative + public void onUpdateUrl(String url) { + } + + @CalledByNative + public boolean takeFocus(boolean reverse) { + return false; + } + + @CalledByNative + public void handleKeyboardEvent(KeyEvent event) { + // TODO(bulach): we probably want to re-inject the KeyEvent back into + // the system. Investigate if this is at all possible. + } + + /** + * Report a JavaScript console message. + * + * @param level message level. One of WebContentsDelegateAndroid.LOG_LEVEL*. + * @param message the error message. + * @param lineNumber the line number int the source file at which the error is reported. + * @param sourceId the name of the source file that caused the error. + * @return true if the client will handle logging the message. + */ + @CalledByNative + public boolean addMessageToConsole(int level, String message, int lineNumber, + String sourceId) { + return false; + } + + /** + * Report a form resubmission. The overwriter of this function should eventually call + * either of ContentViewCore.ContinuePendingReload or ContentViewCore.CancelPendingReload. + */ + @CalledByNative + public void showRepostFormWarningDialog(ContentViewCore contentViewCore) { + } + + @CalledByNative + public void toggleFullscreenModeForTab(boolean enterFullscreen) { + } + + @CalledByNative + public boolean isFullscreenForTabOrPending() { + return false; + } +} diff --git a/content/components/web_contents_delegate_android/web_contents_delegate_android.cc b/content/components/web_contents_delegate_android/web_contents_delegate_android.cc new file mode 100644 index 0000000..9256aa3 --- /dev/null +++ b/content/components/web_contents_delegate_android/web_contents_delegate_android.cc @@ -0,0 +1,317 @@ +// 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. + +#include "content/components/web_contents_delegate_android/web_contents_delegate_android.h" + +#include <android/keycodes.h> + +#include "base/android/jni_android.h" +#include "base/android/jni_string.h" +#include "content/public/browser/android/content_view_core.h" +#include "content/public/browser/render_widget_host_view.h" +#include "content/public/browser/invalidate_type.h" +#include "content/public/browser/page_navigator.h" +#include "content/public/browser/navigation_controller.h" +#include "content/public/browser/navigation_entry.h" +#include "content/public/browser/web_contents.h" +#include "content/public/common/page_transition_types.h" +#include "content/public/common/referrer.h" +#include "jni/WebContentsDelegateAndroid_jni.h" +#include "ui/gfx/rect.h" +#include "webkit/glue/window_open_disposition.h" + +using base::android::AttachCurrentThread; +using base::android::ConvertUTF8ToJavaString; +using base::android::ConvertUTF16ToJavaString; +using base::android::HasClass; +using base::android::ScopedJavaLocalRef; + +namespace content { + +WebContentsDelegateAndroid::WebContentsDelegateAndroid(JNIEnv* env, jobject obj) + : weak_java_delegate_(env, obj) { +} + +WebContentsDelegateAndroid::~WebContentsDelegateAndroid() { +} + +ScopedJavaLocalRef<jobject> +WebContentsDelegateAndroid::GetJavaDelegate(JNIEnv* env) const { + return weak_java_delegate_.get(env); +} + +// ---------------------------------------------------------------------------- +// WebContentsDelegate methods +// ---------------------------------------------------------------------------- + +// OpenURLFromTab() will be called when we're performing a browser-intiated +// navigation. The most common scenario for this is opening new tabs (see +// RenderViewImpl::decidePolicyForNavigation for more details). +WebContents* WebContentsDelegateAndroid::OpenURLFromTab( + WebContents* source, + const OpenURLParams& params) { + const GURL& url = params.url; + WindowOpenDisposition disposition = params.disposition; + PageTransition transition( + PageTransitionFromInt(params.transition)); + + if (!source || (disposition != CURRENT_TAB && + disposition != NEW_FOREGROUND_TAB && + disposition != NEW_BACKGROUND_TAB && + disposition != OFF_THE_RECORD)) { + NOTIMPLEMENTED(); + return NULL; + } + + JNIEnv* env = AttachCurrentThread(); + ScopedJavaLocalRef<jobject> obj = GetJavaDelegate(env); + if (obj.is_null()) + return WebContentsDelegate::OpenURLFromTab(source, params); + + if (disposition == NEW_FOREGROUND_TAB || + disposition == NEW_BACKGROUND_TAB || + disposition == OFF_THE_RECORD) { + JNIEnv* env = AttachCurrentThread(); + ScopedJavaLocalRef<jstring> java_url = + ConvertUTF8ToJavaString(env, url.spec()); + Java_WebContentsDelegateAndroid_openNewTab(env, + obj.obj(), + java_url.obj(), + disposition == OFF_THE_RECORD); + return NULL; + } + + source->GetController().LoadURL(url, params.referrer, transition, + std::string()); + return source; +} + +void WebContentsDelegateAndroid::NavigationStateChanged( + const WebContents* source, unsigned changed_flags) { + if (changed_flags & INVALIDATE_TYPE_TITLE) { + JNIEnv* env = AttachCurrentThread(); + ScopedJavaLocalRef<jobject> obj = GetJavaDelegate(env); + if (obj.is_null()) + return; + Java_WebContentsDelegateAndroid_onTitleUpdated( + env, obj.obj()); + } +} + +void WebContentsDelegateAndroid::AddNewContents( + WebContents* source, + WebContents* new_contents, + WindowOpenDisposition disposition, + const gfx::Rect& initial_pos, + bool user_gesture, + bool* was_blocked) { + JNIEnv* env = AttachCurrentThread(); + ScopedJavaLocalRef<jobject> obj = GetJavaDelegate(env); + bool handled = false; + if (!obj.is_null()) { + handled = Java_WebContentsDelegateAndroid_addNewContents( + env, + obj.obj(), + reinterpret_cast<jint>(source), + reinterpret_cast<jint>(new_contents), + static_cast<jint>(disposition), + NULL, + user_gesture); + } + if (!handled) + delete new_contents; +} + +void WebContentsDelegateAndroid::ActivateContents(WebContents* contents) { + // TODO(dtrainor) When doing the merge I came across this. Should we be + // activating this tab here? +} + +void WebContentsDelegateAndroid::DeactivateContents(WebContents* contents) { + // Do nothing. +} + +void WebContentsDelegateAndroid::LoadingStateChanged(WebContents* source) { + JNIEnv* env = AttachCurrentThread(); + ScopedJavaLocalRef<jobject> obj = GetJavaDelegate(env); + if (obj.is_null()) + return; + bool has_stopped = source == NULL || !source->IsLoading(); + + if (has_stopped) + Java_WebContentsDelegateAndroid_onLoadStopped(env, obj.obj()); + else + Java_WebContentsDelegateAndroid_onLoadStarted(env, obj.obj()); +} + +void WebContentsDelegateAndroid::LoadProgressChanged(WebContents* source, + double progress) { + JNIEnv* env = AttachCurrentThread(); + ScopedJavaLocalRef<jobject> obj = GetJavaDelegate(env); + if (obj.is_null()) + return; + Java_WebContentsDelegateAndroid_onLoadProgressChanged( + env, + obj.obj(), + progress); +} + +void WebContentsDelegateAndroid::CloseContents(WebContents* source) { + JNIEnv* env = AttachCurrentThread(); + ScopedJavaLocalRef<jobject> obj = GetJavaDelegate(env); + if (obj.is_null()) + return; + Java_WebContentsDelegateAndroid_closeContents(env, obj.obj()); +} + +void WebContentsDelegateAndroid::MoveContents(WebContents* source, + const gfx::Rect& pos) { + // Do nothing. +} + +bool WebContentsDelegateAndroid::AddMessageToConsole( + WebContents* source, + int32 level, + const string16& message, + int32 line_no, + const string16& source_id) { + JNIEnv* env = AttachCurrentThread(); + ScopedJavaLocalRef<jobject> obj = GetJavaDelegate(env); + if (obj.is_null()) + return WebContentsDelegate::AddMessageToConsole(source, level, message, + line_no, source_id); + ScopedJavaLocalRef<jstring> jmessage(ConvertUTF16ToJavaString(env, message)); + ScopedJavaLocalRef<jstring> jsource_id( + ConvertUTF16ToJavaString(env, source_id)); + int jlevel = WEB_CONTENTS_DELEGATE_LOG_LEVEL_TIP; + switch (level) { + case logging::LOG_VERBOSE: + jlevel = WEB_CONTENTS_DELEGATE_LOG_LEVEL_TIP; + break; + case logging::LOG_INFO: + jlevel = WEB_CONTENTS_DELEGATE_LOG_LEVEL_LOG; + break; + case logging::LOG_WARNING: + jlevel = WEB_CONTENTS_DELEGATE_LOG_LEVEL_WARNING; + break; + case logging::LOG_ERROR: + jlevel = WEB_CONTENTS_DELEGATE_LOG_LEVEL_ERROR; + break; + default: + NOTREACHED(); + } + return Java_WebContentsDelegateAndroid_addMessageToConsole( + env, + GetJavaDelegate(env).obj(), + jlevel, + jmessage.obj(), + line_no, + jsource_id.obj()); +} + +// TODO(merge): WARNING! method no longer available on the base class. +// See http://crbug.com/149477 +void WebContentsDelegateAndroid::URLStarredChanged(WebContents* source, + bool starred) { + JNIEnv* env = AttachCurrentThread(); + ScopedJavaLocalRef<jobject> obj = GetJavaDelegate(env); + if (obj.is_null()) + return; + Java_WebContentsDelegateAndroid_onUrlStarredChanged(env, obj.obj(), starred); +} + +// This is either called from TabContents::DidNavigateMainFramePostCommit() with +// an empty GURL or responding to RenderViewHost::OnMsgUpateTargetURL(). In +// Chrome, the latter is not always called, especially not during history +// navigation. So we only handle the first case and pass the source TabContents' +// url to Java to update the UI. +void WebContentsDelegateAndroid::UpdateTargetURL(WebContents* source, + int32 page_id, + const GURL& url) { + if (!url.is_empty()) + return; + JNIEnv* env = AttachCurrentThread(); + ScopedJavaLocalRef<jobject> obj = GetJavaDelegate(env); + if (obj.is_null()) + return; + ScopedJavaLocalRef<jstring> java_url = + ConvertUTF8ToJavaString(env, source->GetURL().spec()); + Java_WebContentsDelegateAndroid_onUpdateUrl(env, + obj.obj(), + java_url.obj()); +} + +void WebContentsDelegateAndroid::HandleKeyboardEvent( + WebContents* source, + const NativeWebKeyboardEvent& event) { + jobject key_event = event.os_event; + if (key_event) { + JNIEnv* env = AttachCurrentThread(); + ScopedJavaLocalRef<jobject> obj = GetJavaDelegate(env); + if (obj.is_null()) + return; + Java_WebContentsDelegateAndroid_handleKeyboardEvent( + env, obj.obj(), key_event); + } +} + +bool WebContentsDelegateAndroid::TakeFocus(WebContents* source, bool reverse) { + JNIEnv* env = AttachCurrentThread(); + ScopedJavaLocalRef<jobject> obj = GetJavaDelegate(env); + if (obj.is_null()) + return WebContentsDelegate::TakeFocus(source, reverse); + return Java_WebContentsDelegateAndroid_takeFocus( + env, obj.obj(), reverse); +} + +void WebContentsDelegateAndroid::ShowRepostFormWarningDialog( + WebContents* source) { + JNIEnv* env = AttachCurrentThread(); + ScopedJavaLocalRef<jobject> obj = GetJavaDelegate(env); + if (obj.is_null()) + return; + ScopedJavaLocalRef<jobject> content_view_core = + ContentViewCore::FromWebContents(source)->GetJavaObject(); + if (content_view_core.is_null()) + return; + Java_WebContentsDelegateAndroid_showRepostFormWarningDialog(env, obj.obj(), + content_view_core.obj()); +} + +void WebContentsDelegateAndroid::ToggleFullscreenModeForTab( + WebContents* web_contents, + bool enter_fullscreen) { + JNIEnv* env = AttachCurrentThread(); + ScopedJavaLocalRef<jobject> obj = GetJavaDelegate(env); + if (obj.is_null()) + return; + Java_WebContentsDelegateAndroid_toggleFullscreenModeForTab( + env, obj.obj(), enter_fullscreen); +} + +bool WebContentsDelegateAndroid::IsFullscreenForTabOrPending( + const WebContents* web_contents) const { + JNIEnv* env = AttachCurrentThread(); + ScopedJavaLocalRef<jobject> obj = GetJavaDelegate(env); + if (obj.is_null()) + return false; + return Java_WebContentsDelegateAndroid_isFullscreenForTabOrPending( + env, obj.obj()); +} + +// ---------------------------------------------------------------------------- +// Native JNI methods +// ---------------------------------------------------------------------------- + +// Register native methods + +bool RegisterWebContentsDelegateAndroid(JNIEnv* env) { + if (!HasClass(env, kWebContentsDelegateAndroidClassPath)) { + DLOG(ERROR) << "Unable to find class WebContentsDelegateAndroid!"; + return false; + } + return RegisterNativesImpl(env); +} + +} // namespace content diff --git a/content/components/web_contents_delegate_android/web_contents_delegate_android.h b/content/components/web_contents_delegate_android/web_contents_delegate_android.h new file mode 100644 index 0000000..967177c --- /dev/null +++ b/content/components/web_contents_delegate_android/web_contents_delegate_android.h @@ -0,0 +1,111 @@ +// 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 CHROME_BROWSER_COMPONENT_WEB_CONTENTS_DELEGATE_ANDROID_WEB_CONTENTS_DELEGATE_ANDROID_H_ +#define CHROME_BROWSER_COMPONENT_WEB_CONTENTS_DELEGATE_ANDROID_WEB_CONTENTS_DELEGATE_ANDROID_H_ + +#include "base/android/jni_helper.h" +#include "base/android/scoped_java_ref.h" +#include "base/compiler_specific.h" +#include "base/memory/scoped_ptr.h" +#include "content/public/browser/native_web_keyboard_event.h" +#include "content/public/browser/web_contents_delegate.h" +#include "content/public/browser/web_contents_observer.h" +#include "content/public/common/javascript_message_type.h" +#include "content/public/common/referrer.h" +#include "googleurl/src/gurl.h" +#include "net/base/net_errors.h" + +namespace content { +class JavaScriptDialogCreator; +class RenderViewHost; +class WebContents; +class WebContentsObserver; +struct NativeWebKeyboardEvent; + +enum WebContentsDelegateLogLevel { + // Equivalent of WebCore::WebConsoleMessage::LevelTip. + WEB_CONTENTS_DELEGATE_LOG_LEVEL_TIP = 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 WebContentsDelegate { + public: + WebContentsDelegateAndroid(JNIEnv* env, jobject obj); + virtual ~WebContentsDelegateAndroid(); + + // Binds this WebContentsDelegateAndroid to the passed WebContents instance, + // such that when that WebContents is destroyed, this + // WebContentsDelegateAndroid instance will be destroyed too. + void SetOwnerWebContents(WebContents* contents); + + // Overridden from WebContentsDelegate: + virtual WebContents* OpenURLFromTab( + WebContents* source, + const OpenURLParams& params) OVERRIDE; + + virtual void NavigationStateChanged(const WebContents* source, + unsigned changed_flags) OVERRIDE; + virtual void AddNewContents(WebContents* source, + WebContents* new_contents, + WindowOpenDisposition disposition, + const gfx::Rect& initial_pos, + bool user_gesture, + bool* was_blocked) OVERRIDE; + virtual void ActivateContents(WebContents* contents) OVERRIDE; + virtual void DeactivateContents(WebContents* contents) OVERRIDE; + virtual void LoadingStateChanged(WebContents* source) OVERRIDE; + virtual void LoadProgressChanged(WebContents* source, + double load_progress) OVERRIDE; + virtual void CloseContents(WebContents* source) OVERRIDE; + virtual void MoveContents(WebContents* source, + const gfx::Rect& pos) OVERRIDE; + virtual bool AddMessageToConsole(WebContents* source, + int32 level, + const string16& message, + int32 line_no, + const string16& source_id) OVERRIDE; + // TODO(merge): WARNING! method no longer available on the base class. + // See http://crbug.com/149477 + virtual void URLStarredChanged(WebContents* source, bool starred); + virtual void UpdateTargetURL(WebContents* source, + int32 page_id, + const GURL& url) OVERRIDE; + virtual void HandleKeyboardEvent( + WebContents* source, + const NativeWebKeyboardEvent& event) OVERRIDE; + virtual bool TakeFocus(WebContents* source, bool reverse) OVERRIDE; + + virtual void ShowRepostFormWarningDialog(WebContents* source) OVERRIDE; + + virtual void ToggleFullscreenModeForTab(content::WebContents* web_contents, + bool enter_fullscreen) OVERRIDE; + virtual bool IsFullscreenForTabOrPending( + const content::WebContents* web_contents) const 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_; +}; + +bool RegisterWebContentsDelegateAndroid(JNIEnv* env); + +} // namespace content + +#endif // CHROME_BROWSER_COMPONENT_WEB_CONTENTS_DELEGATE_ANDROID_WEB_CONTENTS_DELEGATE_ANDROID_H_ diff --git a/content/content.gyp b/content/content.gyp index 9961de2..a0d3877 100644 --- a/content/content.gyp +++ b/content/content.gyp @@ -34,6 +34,7 @@ 'includes': [ '../build/win_precompile.gypi', 'content_components_navigation_interception.gypi', + 'content_components_web_contents_delegate_android.gypi', 'content_shell.gypi', ], }], diff --git a/content/content_components_web_contents_delegate_android.gypi b/content/content_components_web_contents_delegate_android.gypi new file mode 100644 index 0000000..2d5b96e --- /dev/null +++ b/content/content_components_web_contents_delegate_android.gypi @@ -0,0 +1,62 @@ +# 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. + +{ + 'conditions': [ + ['OS=="android"', { + 'targets': [ + { + 'target_name': 'web_contents_delegate_android', + 'type': 'static_library', + 'dependencies': [ + '../base/base.gyp:base', + '../net/net.gyp:net', + '../skia/skia.gyp:skia', + '../ui/ui.gyp:ui', + '../webkit/support/webkit_support.gyp:glue', + 'content_browser', + 'content_common', + 'web_contents_delegate_android_jni_headers', + ], + 'include_dirs': [ + '..', + '../skia/config', + '<(SHARED_INTERMEDIATE_DIR)/web_contents_delegate_android', + ], + 'sources': [ + 'components/web_contents_delegate_android/component_jni_registrar.cc', + 'components/web_contents_delegate_android/component_jni_registrar.h', + 'components/web_contents_delegate_android/web_contents_delegate_android.cc', + 'components/web_contents_delegate_android/web_contents_delegate_android.h', + ], + }, + { + 'target_name': 'web_contents_delegate_android_java', + 'type': 'none', + 'dependencies': [ + '../base/base.gyp:base', + 'content_java', + ], + 'variables': { + 'package_name': 'web_contents_delegate_android', + 'java_in_dir': 'components/web_contents_delegate_android/java', + }, + 'includes': [ '../build/java.gypi' ], + }, + { + 'target_name': 'web_contents_delegate_android_jni_headers', + 'type': 'none', + 'sources': [ + 'components/web_contents_delegate_android/java/src/org/chromium/content/components/web_contents_delegate_android/WebContentsDelegateAndroid.java', + ], + 'variables': { + 'jni_gen_dir': 'web_contents_delegate_android', + }, + 'includes': [ '../build/jni_generator.gypi' ], + }, + ], + }], + ], +} |