1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// Copyright 2014 The Chromium Authors. All rights reserved.
2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// Use of this source code is governed by a BSD-style license that can be
3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// found in the LICENSE file.
4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "content/browser/android/ui_resource_provider_impl.h"
6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "cc/resources/ui_resource_client.h"
8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "cc/trees/layer_tree_host.h"
9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "content/public/browser/android/ui_resource_client_android.h"
10ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
11436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovnamespace content {
12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownUIResourceProviderImpl::UIResourceProviderImpl()
14436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov    : system_ui_resource_manager_(this), host_(NULL),
15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      supports_etc1_npot_(false) {
16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownUIResourceProviderImpl::~UIResourceProviderImpl() {
20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  SetLayerTreeHost(NULL);
21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid UIResourceProviderImpl::SetLayerTreeHost(cc::LayerTreeHost* host) {
24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  if (host_ == host)
25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    return;
26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  host_ = host;
27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  UIResourcesAreInvalid();
28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
29ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
30ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid UIResourceProviderImpl::UIResourcesAreInvalid() {
31ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  UIResourceClientMap client_map = ui_resource_client_map_;
32ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  ui_resource_client_map_.clear();
33ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  for (UIResourceClientMap::iterator iter = client_map.begin();
34ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown       iter != client_map.end();
35ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown       iter++) {
36ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    iter->second->UIResourceIsInvalid();
37ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  }
38b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
39b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
40ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browncc::UIResourceId UIResourceProviderImpl::CreateUIResource(
41ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    UIResourceClientAndroid* client) {
42ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  if (!host_)
43ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    return 0;
44ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  cc::UIResourceId id = host_->CreateUIResource(client);
45ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  DCHECK(ui_resource_client_map_.find(id) == ui_resource_client_map_.end());
46ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
47ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  ui_resource_client_map_[id] = client;
48ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  return id;
49ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
50ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
51ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid UIResourceProviderImpl::DeleteUIResource(cc::UIResourceId ui_resource_id) {
52ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  UIResourceClientMap::iterator iter =
53ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      ui_resource_client_map_.find(ui_resource_id);
54ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  DCHECK(iter != ui_resource_client_map_.end());
55663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
56663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng  ui_resource_client_map_.erase(iter);
57663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
58663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng  if (!host_)
59ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    return;
60ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  host_->DeleteUIResource(ui_resource_id);
61ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
62ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
63ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownui::SystemUIResourceManager&
64ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownUIResourceProviderImpl::GetSystemUIResourceManager() {
65ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  return system_ui_resource_manager_;
66ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
67ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
68ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownbool UIResourceProviderImpl::SupportsETC1NonPowerOfTwo() const {
69ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  return supports_etc1_npot_;
70ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
71ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
72ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}  // namespace content
73ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown