diff options
author | joth@chromium.org <joth@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-28 03:15:55 +0000 |
---|---|---|
committer | joth@chromium.org <joth@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-28 03:15:55 +0000 |
commit | 963248091b6ac10c38dc7d8e28992c8e73b46cc7 (patch) | |
tree | b6cffc3d1eaa4f20dae08837a4b925ed70110385 /android_webview | |
parent | de105aa67a3a0ac06ae716cbd79144f882efa1ac (diff) | |
download | chromium_src-963248091b6ac10c38dc7d8e28992c8e73b46cc7.zip chromium_src-963248091b6ac10c38dc7d8e28992c8e73b46cc7.tar.gz chromium_src-963248091b6ac10c38dc7d8e28992c8e73b46cc7.tar.bz2 |
Support fetching AwContents from a WebContents
This is to allow callbacks coming up from WebContents to find their way back to the java AwContents[Client]
BUG=
Review URL: https://chromiumcodereview.appspot.com/10868095
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@153617 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'android_webview')
-rw-r--r-- | android_webview/native/aw_contents.cc | 31 | ||||
-rw-r--r-- | android_webview/native/aw_contents.h | 4 |
2 files changed, 35 insertions, 0 deletions
diff --git a/android_webview/native/aw_contents.cc b/android_webview/native/aw_contents.cc index ce29d18..f5eeebe 100644 --- a/android_webview/native/aw_contents.cc +++ b/android_webview/native/aw_contents.cc @@ -9,6 +9,7 @@ #include "android_webview/native/aw_web_contents_delegate.h" #include "base/android/jni_android.h" #include "base/android/jni_string.h" +#include "base/supports_user_data.h" #include "content/public/browser/android/content_view_core.h" #include "content/public/browser/web_contents.h" #include "jni/AwContents_jni.h" @@ -20,6 +21,31 @@ using content::WebContents; namespace android_webview { +namespace { + +const void* kAwContentsUserDataKey = &kAwContentsUserDataKey; + +class AwContentsUserData : public base::SupportsUserData::Data { + public: + AwContentsUserData(AwContents* ptr) : contents_(ptr) {} + AwContents* get() { return contents_; } + + private: + AwContents* contents_; +}; + +} // namespace + +// static +AwContents* AwContents::FromWebContents(content::WebContents* web_contents) { + if (web_contents) { + AwContentsUserData* data = reinterpret_cast<AwContentsUserData*>( + web_contents->GetUserData(kAwContentsUserDataKey)); + if (data) return data->get(); + } + return NULL; +} + AwContents::AwContents(JNIEnv* env, jobject obj, jobject web_contents_delegate, @@ -36,9 +62,14 @@ AwContents::AwContents(JNIEnv* env, web_contents->SetDelegate(web_contents_delegate_.get()); web_contents_delegate_->SetJavaScriptDialogCreator( dependency_factory->GetJavaScriptDialogCreator()); + web_contents->SetUserData(kAwContentsUserDataKey, + new AwContentsUserData(this)); } AwContents::~AwContents() { + content::WebContents* web_contents = contents_container_->GetWebContents(); + DCHECK(AwContents::FromWebContents(web_contents) == this); + web_contents->RemoveUserData(kAwContentsUserDataKey); } jint AwContents::GetWebContents(JNIEnv* env, jobject obj) { diff --git a/android_webview/native/aw_contents.h b/android_webview/native/aw_contents.h index b37511a..b282585 100644 --- a/android_webview/native/aw_contents.h +++ b/android_webview/native/aw_contents.h @@ -27,12 +27,16 @@ class AwWebContentsDelegate; // level of indirection provided by the AwContentsContainer abstraction. class AwContents { public: + // Returns the AwContents instance associated with |web_contents|, or NULL. + static AwContents* FromWebContents(content::WebContents* web_contents); + AwContents(JNIEnv* env, jobject obj, jobject web_contents_delegate, bool private_browsing); ~AwContents(); + // Methods called from Java. jint GetWebContents(JNIEnv* env, jobject obj); void Destroy(JNIEnv* env, jobject obj); |