Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(194)

Unified Diff: content/browser/android/content_view_core_impl.cc

Issue 9192008: Hook up ContentViewCore.add/removeJavascriptInterface() (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Modify ContentViewCoreImpl to use WebContentsImpl Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/android/content_view_core_impl.cc
diff --git a/content/browser/android/content_view_core_impl.cc b/content/browser/android/content_view_core_impl.cc
index a867ae5d2e027d0b0b57335b719a60350fd86bc3..1185a82557e18413a9b56fb945e9775c4356a31c 100644
--- a/content/browser/android/content_view_core_impl.cc
+++ b/content/browser/android/content_view_core_impl.cc
@@ -9,17 +9,21 @@
#include "base/android/jni_string.h"
#include "base/android/scoped_java_ref.h"
#include "content/browser/android/content_view_client.h"
+#include "content/browser/renderer_host/java/java_bound_object.h"
+#include "content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.h"
#include "content/browser/renderer_host/render_view_host_impl.h"
#include "content/browser/web_contents/navigation_controller_impl.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/web_contents.h"
#include "jni/ContentViewCore_jni.h"
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebBindings.h"
#include "webkit/glue/webmenuitem.h"
using base::android::AttachCurrentThread;
using base::android::ConvertUTF16ToJavaString;
using base::android::ConvertUTF8ToJavaString;
using base::android::GetClass;
+using base::android::ConvertJavaStringToUTF16;
Ted C 2012/07/27 18:09:04 move under AttachCurrentThread
Steve Block 2012/07/30 11:45:14 Done.
using base::android::HasField;
using base::android::ScopedJavaGlobalRef;
using base::android::ScopedJavaLocalRef;
@@ -64,7 +68,7 @@ ContentViewCore* ContentViewCore::GetNativeContentViewCore(JNIEnv* env,
ContentViewCoreImpl::ContentViewCoreImpl(JNIEnv* env, jobject obj,
WebContents* web_contents)
- : web_contents_(web_contents),
+ : web_contents_impl_(static_cast<WebContentsImpl*>(web_contents)),
jam 2012/07/27 23:29:57 nit: just keep it web_contents_, even if it is a W
Steve Block 2012/07/30 11:45:14 Done.
tab_crashed_(false) {
DCHECK(web_contents) <<
"A ContentViewCoreImpl should be created with a valid WebContents.";
@@ -146,56 +150,56 @@ jboolean ContentViewCoreImpl::IsIncognito(JNIEnv* env, jobject obj) {
}
jboolean ContentViewCoreImpl::CanGoBack(JNIEnv* env, jobject obj) {
- return web_contents_->GetController().CanGoBack();
+ return web_contents_impl_->GetController().CanGoBack();
}
jboolean ContentViewCoreImpl::CanGoForward(JNIEnv* env, jobject obj) {
- return web_contents_->GetController().CanGoForward();
+ return web_contents_impl_->GetController().CanGoForward();
}
jboolean ContentViewCoreImpl::CanGoToOffset(JNIEnv* env, jobject obj,
jint offset) {
- return web_contents_->GetController().CanGoToOffset(offset);
+ return web_contents_impl_->GetController().CanGoToOffset(offset);
}
void ContentViewCoreImpl::GoBack(JNIEnv* env, jobject obj) {
- web_contents_->GetController().GoBack();
+ web_contents_impl_->GetController().GoBack();
tab_crashed_ = false;
}
void ContentViewCoreImpl::GoForward(JNIEnv* env, jobject obj) {
- web_contents_->GetController().GoForward();
+ web_contents_impl_->GetController().GoForward();
tab_crashed_ = false;
}
void ContentViewCoreImpl::GoToOffset(JNIEnv* env, jobject obj, jint offset) {
- web_contents_->GetController().GoToOffset(offset);
+ web_contents_impl_->GetController().GoToOffset(offset);
}
void ContentViewCoreImpl::StopLoading(JNIEnv* env, jobject obj) {
- web_contents_->Stop();
+ web_contents_impl_->Stop();
}
void ContentViewCoreImpl::Reload(JNIEnv* env, jobject obj) {
// Set check_for_repost parameter to false as we have no repost confirmation
// dialog ("confirm form resubmission" screen will still appear, however).
- web_contents_->GetController().Reload(false);
+ web_contents_impl_->GetController().Reload(false);
tab_crashed_ = false;
}
void ContentViewCoreImpl::ClearHistory(JNIEnv* env, jobject obj) {
- web_contents_->GetController().PruneAllButActive();
+ web_contents_impl_->GetController().PruneAllButActive();
}
jboolean ContentViewCoreImpl::NeedsReload(JNIEnv* env, jobject obj) {
- return web_contents_->GetController().NeedsReload();
+ return web_contents_impl_->GetController().NeedsReload();
}
void ContentViewCoreImpl::SetClient(JNIEnv* env, jobject obj, jobject jclient) {
scoped_ptr<ContentViewClient> client(
ContentViewClient::CreateNativeContentViewClient(env, jclient));
- web_contents_->SetDelegate(client.get());
+ web_contents_impl_->SetDelegate(client.get());
content_view_client_.swap(client);
}
@@ -343,7 +347,7 @@ void ContentViewCoreImpl::StartContentIntent(const GURL& content_url) {
void ContentViewCoreImpl::SelectPopupMenuItems(JNIEnv* env, jobject obj,
jintArray indices) {
RenderViewHostImpl* rvhi = static_cast<RenderViewHostImpl*>(
- web_contents_->GetRenderViewHost());
+ web_contents_impl_->GetRenderViewHost());
DCHECK(rvhi);
if (indices == NULL) {
rvhi->DidCancelPopupMenu();
@@ -359,6 +363,29 @@ void ContentViewCoreImpl::SelectPopupMenuItems(JNIEnv* env, jobject obj,
rvhi->DidSelectPopupMenuItems(selected_indices);
}
+void ContentViewCoreImpl::AddJavascriptInterface(
+ JNIEnv* env,
+ jobject /* obj */,
+ jobject object,
+ jstring name,
+ jboolean allow_inherited_methods) {
+ ScopedJavaLocalRef<jobject> scoped_object(env, object);
+ // JavaBoundObject creates the NPObject with a ref count of 1, and
+ // JavaBridgeDispatcherHostManager takes its own ref.
+ NPObject* bound_object = JavaBoundObject::Create(scoped_object,
+ allow_inherited_methods);
+ web_contents_impl_->java_bridge_dispatcher_host_manager()->AddNamedObject(
+ ConvertJavaStringToUTF16(env, name), bound_object);
+ WebKit::WebBindings::releaseObject(bound_object);
+}
+
+void ContentViewCoreImpl::RemoveJavascriptInterface(JNIEnv* env,
+ jobject /* obj */,
+ jstring name) {
+ web_contents_impl_->java_bridge_dispatcher_host_manager()->RemoveNamedObject(
+ ConvertJavaStringToUTF16(env, name));
+}
+
// --------------------------------------------------------------------------
// Methods called from native code
// --------------------------------------------------------------------------

Powered by Google App Engine
This is Rietveld 408576698