| Index: android_webview/browser/aw_contents_client_bridge_base.cc
|
| diff --git a/android_webview/browser/aw_contents_client_bridge_base.cc b/android_webview/browser/aw_contents_client_bridge_base.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..2e7b62c8a54cbc166fc6bc800d193468e9693e5b
|
| --- /dev/null
|
| +++ b/android_webview/browser/aw_contents_client_bridge_base.cc
|
| @@ -0,0 +1,72 @@
|
| +// Copyright (c) 2013 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 "android_webview/browser/aw_contents_client_bridge_base.h"
|
| +
|
| +#include "content/public/browser/browser_thread.h"
|
| +#include "content/public/browser/render_view_host.h"
|
| +#include "content/public/browser/web_contents.h"
|
| +
|
| +using content::BrowserThread;
|
| +using content::WebContents;
|
| +
|
| +namespace android_webview {
|
| +
|
| +namespace {
|
| +
|
| +const void* kAwContentsClientBridgeBase = &kAwContentsClientBridgeBase;
|
| +
|
| +// This class is invented so that the UserData registry that we inject the
|
| +// AwContentsClientBridgeBase object does not own and destroy it.
|
| +class UserData : public base::SupportsUserData::Data {
|
| + public:
|
| + static AwContentsClientBridgeBase* GetContents(
|
| + content::WebContents* web_contents) {
|
| + if (!web_contents)
|
| + return NULL;
|
| + UserData* data = reinterpret_cast<UserData*>(
|
| + web_contents->GetUserData(kAwContentsClientBridgeBase));
|
| + return data ? data->contents_ : NULL;
|
| + }
|
| +
|
| + explicit UserData(AwContentsClientBridgeBase* ptr) : contents_(ptr) {}
|
| + private:
|
| + AwContentsClientBridgeBase* contents_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(UserData);
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| +// static
|
| +void AwContentsClientBridgeBase::Associate(
|
| + WebContents* web_contents,
|
| + AwContentsClientBridgeBase* handler) {
|
| + web_contents->SetUserData(kAwContentsClientBridgeBase,
|
| + new UserData(handler));
|
| +}
|
| +
|
| +// static
|
| +AwContentsClientBridgeBase* AwContentsClientBridgeBase::FromWebContents(
|
| + WebContents* web_contents) {
|
| + return UserData::GetContents(web_contents);
|
| +}
|
| +
|
| +// static
|
| +AwContentsClientBridgeBase* AwContentsClientBridgeBase::FromID(
|
| + int render_process_id,
|
| + int render_view_id) {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| + const content::RenderViewHost* rvh =
|
| + content::RenderViewHost::FromID(render_process_id, render_view_id);
|
| + if (!rvh) return NULL;
|
| + content::WebContents* web_contents =
|
| + content::WebContents::FromRenderViewHost(rvh);
|
| + return UserData::GetContents(web_contents);
|
| +}
|
| +
|
| +AwContentsClientBridgeBase::~AwContentsClientBridgeBase() {
|
| +}
|
| +
|
| +} // namespace android_webview
|
|
|