• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 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 "chrome/browser/automation/automation_resource_tracker.h"
6 
7 #include "chrome/common/automation_messages.h"
8 
AutomationResourceTrackerImpl(IPC::Sender * sender)9 AutomationResourceTrackerImpl::AutomationResourceTrackerImpl(
10     IPC::Sender* sender)
11     : sender_(sender) {
12 }
13 
~AutomationResourceTrackerImpl()14 AutomationResourceTrackerImpl::~AutomationResourceTrackerImpl() {
15 }
16 
AddImpl(const void * resource)17 int AutomationResourceTrackerImpl::AddImpl(const void* resource) {
18   if (ContainsResourceImpl(resource))
19     return resource_to_handle_[resource];
20 
21   int handle = GenerateHandle();
22   DCHECK(!ContainsHandleImpl(handle));
23 
24   resource_to_handle_[resource] = handle;
25   handle_to_resource_[handle] = resource;
26 
27   AddObserverTypeProxy(resource);
28 
29   return handle;
30 }
31 
RemoveImpl(const void * resource)32 void AutomationResourceTrackerImpl::RemoveImpl(const void* resource) {
33   if (!ContainsResourceImpl(resource))
34     return;
35 
36   int handle = resource_to_handle_[resource];
37   DCHECK_EQ(resource, handle_to_resource_[handle]);
38 
39   RemoveObserverTypeProxy(resource);
40 
41   resource_to_handle_.erase(resource);
42   handle_to_resource_.erase(handle);
43 }
44 
GenerateHandle()45 int AutomationResourceTrackerImpl::GenerateHandle() {
46   static int handle = 0;
47   return ++handle;
48 }
49 
ContainsResourceImpl(const void * resource)50 bool AutomationResourceTrackerImpl::ContainsResourceImpl(const void* resource) {
51   return resource_to_handle_.find(resource) != resource_to_handle_.end();
52 }
53 
ContainsHandleImpl(int handle)54 bool AutomationResourceTrackerImpl::ContainsHandleImpl(int handle) {
55   return handle_to_resource_.find(handle) != handle_to_resource_.end();
56 }
57 
GetResourceImpl(int handle)58 const void* AutomationResourceTrackerImpl::GetResourceImpl(int handle) {
59   HandleToResourceMap::const_iterator iter = handle_to_resource_.find(handle);
60   if (iter == handle_to_resource_.end())
61     return NULL;
62 
63   return iter->second;
64 }
65 
GetHandleImpl(const void * resource)66 int AutomationResourceTrackerImpl::GetHandleImpl(const void* resource) {
67   ResourceToHandleMap::const_iterator iter =
68     resource_to_handle_.find(resource);
69   if (iter == resource_to_handle_.end())
70     return 0;
71 
72   return iter->second;
73 }
74 
HandleCloseNotification(const void * resource)75 void AutomationResourceTrackerImpl::HandleCloseNotification(
76     const void* resource) {
77   if (!ContainsResourceImpl(resource))
78     return;
79 
80   sender_->Send(
81     new AutomationMsg_InvalidateHandle(resource_to_handle_[resource]));
82 
83   RemoveImpl(resource);
84 }
85