15c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Copyright 2014 The Chromium Authors. All rights reserved. 25c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Use of this source code is governed by a BSD-style license that can be 35c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// found in the LICENSE file. 45c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 55c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#ifndef UI_VIEWS_ACCESSIBILITY_AX_AURA_OBJ_CACHE_H_ 65c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#define UI_VIEWS_ACCESSIBILITY_AX_AURA_OBJ_CACHE_H_ 75c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 85c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include <map> 95c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/basictypes.h" 115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "ui/views/views_export.h" 125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liutemplate <typename T> struct DefaultSingletonTraits; 145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace aura { 165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass Window; 175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} // namespace aura 185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace views { 205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass AXAuraObjWrapper; 215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass View; 225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass Widget; 235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// A cache responsible for assigning id's to a set of interesting Aura views. 255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass VIEWS_EXPORT AXAuraObjCache { 265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu public: 275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Get the single instance of this class. 285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu static AXAuraObjCache* GetInstance(); 295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Get or create an entry in the cache based on an Aura view. 315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu AXAuraObjWrapper* GetOrCreate(View* view); 325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu AXAuraObjWrapper* GetOrCreate(Widget* widget); 335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu AXAuraObjWrapper* GetOrCreate(aura::Window* window); 345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Gets an id given an Aura view. 365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int32 GetID(View* view); 375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int32 GetID(Widget* widget); 385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int32 GetID(aura::Window* window); 395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Gets the next unique id for this cache. Useful for non-Aura view backed 415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // views. 425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int32 GetNextID() { return current_id_++; } 435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Removes an entry from this cache based on an Aura view. 455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void Remove(View* view); 465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void Remove(Widget* widget); 475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void Remove(aura::Window* window); 485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Lookup a cached entry based on an id. 505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu AXAuraObjWrapper* Get(int32 id); 515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Remove a cached entry based on an id. 535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void Remove(int32 id); 545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu private: 565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu friend struct DefaultSingletonTraits<AXAuraObjCache>; 575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu AXAuraObjCache(); 595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual ~AXAuraObjCache(); 605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu template <typename AuraViewWrapper, typename AuraView> 625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu AXAuraObjWrapper* CreateInternal( 635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu AuraView* aura_view, std::map<AuraView*, int32>& aura_view_to_id_map); 645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu template<typename AuraView> int32 GetIDInternal( 665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu AuraView* aura_view, std::map<AuraView*, int32>& aura_view_to_id_map); 675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu template<typename AuraView> void RemoveInternal( 695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu AuraView* aura_view, std::map<AuraView*, int32>& aura_view_to_id_map); 705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu std::map<views::View*, int32> view_to_id_map_; 725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu std::map<views::Widget*, int32> widget_to_id_map_; 735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu std::map<aura::Window*, int32> window_to_id_map_; 745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu std::map<int32, AXAuraObjWrapper*> cache_; 765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int32 current_id_; 775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu DISALLOW_COPY_AND_ASSIGN(AXAuraObjCache); 795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}; 805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} // namespace views 825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#endif // UI_VIEWS_ACCESSIBILITY_AX_AURA_OBJ_CACHE_H_ 84