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. 4 5 #include "android_webview/browser/aw_contents_client_bridge_base.h" 6 7 #include "content/public/browser/browser_thread.h" 8 #include "content/public/browser/render_view_host.h" 9 #include "content/public/browser/web_contents.h" 10 11 using content::BrowserThread; 12 using content::WebContents; 13 14 namespace android_webview { 15 16 namespace { 17 18 const void* kAwContentsClientBridgeBase = &kAwContentsClientBridgeBase; 19 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 { 23 public: 24 static AwContentsClientBridgeBase* GetContents( 25 content::WebContents* web_contents) { 26 if (!web_contents) 27 return NULL; 28 UserData* data = reinterpret_cast<UserData*>( 29 web_contents->GetUserData(kAwContentsClientBridgeBase)); 30 return data ? data->contents_ : NULL; 31 } 32 33 explicit UserData(AwContentsClientBridgeBase* ptr) : contents_(ptr) {} 34 private: 35 AwContentsClientBridgeBase* contents_; 36 37 DISALLOW_COPY_AND_ASSIGN(UserData); 38 }; 39 40 } // namespace 41 42 // static 43 void AwContentsClientBridgeBase::Associate( 44 WebContents* web_contents, 45 AwContentsClientBridgeBase* handler) { 46 web_contents->SetUserData(kAwContentsClientBridgeBase, 47 new UserData(handler)); 48 } 49 50 // static 51 AwContentsClientBridgeBase* AwContentsClientBridgeBase::FromWebContents( 52 WebContents* web_contents) { 53 return UserData::GetContents(web_contents); 54 } 55 56 // static 57 AwContentsClientBridgeBase* AwContentsClientBridgeBase::FromID( 58 int render_process_id, 59 int render_view_id) { 60 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 61 const content::RenderViewHost* rvh = 62 content::RenderViewHost::FromID(render_process_id, render_view_id); 63 if (!rvh) return NULL; 64 content::WebContents* web_contents = 65 content::WebContents::FromRenderViewHost(rvh); 66 return UserData::GetContents(web_contents); 67 } 68 69 AwContentsClientBridgeBase::~AwContentsClientBridgeBase() { 70 } 71 72 } // namespace android_webview 73