1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Copyright (c) 2013 Intel Corporation. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
6 #include "xwalk/runtime/browser/android/xwalk_contents_client_bridge_base.h"
8 #include "content/public/browser/browser_thread.h"
9 #include "content/public/browser/render_view_host.h"
10 #include "content/public/browser/web_contents.h"
12 using content::BrowserThread;
13 using content::WebContents;
19 const void* kXWalkContentsClientBridgeBase = &kXWalkContentsClientBridgeBase;
21 // This class is invented so that the UserData registry that we inject the
22 // XWalkContentsClientBridgeBase object does not own and destroy it.
23 class UserData : public base::SupportsUserData::Data {
25 static XWalkContentsClientBridgeBase* GetContents(
26 content::WebContents* web_contents) {
29 UserData* data = reinterpret_cast<UserData*>(
30 web_contents->GetUserData(kXWalkContentsClientBridgeBase));
31 return data ? data->contents_ : NULL;
34 explicit UserData(XWalkContentsClientBridgeBase* ptr) : contents_(ptr) {}
36 XWalkContentsClientBridgeBase* contents_;
38 DISALLOW_COPY_AND_ASSIGN(UserData);
44 void XWalkContentsClientBridgeBase::Associate(
45 WebContents* web_contents,
46 XWalkContentsClientBridgeBase* handler) {
47 web_contents->SetUserData(kXWalkContentsClientBridgeBase,
48 new UserData(handler));
52 XWalkContentsClientBridgeBase* XWalkContentsClientBridgeBase::FromWebContents(
53 WebContents* web_contents) {
54 return UserData::GetContents(web_contents);
58 XWalkContentsClientBridgeBase* XWalkContentsClientBridgeBase::FromID(
59 int render_process_id,
61 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
62 const content::RenderViewHost* rvh =
63 content::RenderViewHost::FromID(render_process_id, render_view_id);
64 if (!rvh) return NULL;
65 content::WebContents* web_contents =
66 content::WebContents::FromRenderViewHost(rvh);
67 return UserData::GetContents(web_contents);
70 XWalkContentsClientBridgeBase::~XWalkContentsClientBridgeBase() {