1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "android_webview/browser/aw_contents_client_bridge_base.h"
7 #include "content/public/browser/browser_thread.h"
8 #include "content/public/browser/render_frame_host.h"
9 #include "content/public/browser/web_contents.h"
11 using content::BrowserThread
;
12 using content::WebContents
;
14 namespace android_webview
{
18 const void* kAwContentsClientBridgeBase
= &kAwContentsClientBridgeBase
;
20 // This class is invented so that the UserData registry that we inject the
21 // AwContentsClientBridgeBase object does not own and destroy it.
22 class UserData
: public base::SupportsUserData::Data
{
24 static AwContentsClientBridgeBase
* GetContents(
25 content::WebContents
* web_contents
) {
28 UserData
* data
= reinterpret_cast<UserData
*>(
29 web_contents
->GetUserData(kAwContentsClientBridgeBase
));
30 return data
? data
->contents_
: NULL
;
33 explicit UserData(AwContentsClientBridgeBase
* ptr
) : contents_(ptr
) {}
35 AwContentsClientBridgeBase
* contents_
;
37 DISALLOW_COPY_AND_ASSIGN(UserData
);
43 void AwContentsClientBridgeBase::Associate(
44 WebContents
* web_contents
,
45 AwContentsClientBridgeBase
* handler
) {
46 web_contents
->SetUserData(kAwContentsClientBridgeBase
,
47 new UserData(handler
));
50 void AwContentsClientBridgeBase::Disassociate(
51 WebContents
* web_contents
) {
52 web_contents
->RemoveUserData(kAwContentsClientBridgeBase
);
56 AwContentsClientBridgeBase
* AwContentsClientBridgeBase::FromWebContents(
57 WebContents
* web_contents
) {
58 return UserData::GetContents(web_contents
);
62 AwContentsClientBridgeBase
* AwContentsClientBridgeBase::FromID(
63 int render_process_id
,
64 int render_frame_id
) {
65 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI
));
66 content::RenderFrameHost
* rfh
=
67 content::RenderFrameHost::FromID(render_process_id
, render_frame_id
);
68 content::WebContents
* web_contents
=
69 content::WebContents::FromRenderFrameHost(rfh
);
70 return UserData::GetContents(web_contents
);
73 AwContentsClientBridgeBase::~AwContentsClientBridgeBase() {
76 } // namespace android_webview