OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "services/ui/view_manager/view_tree_state.h" | 5 #include "services/ui/view_manager/view_tree_state.h" |
6 | 6 |
| 7 #include "base/bind.h" |
7 #include "base/logging.h" | 8 #include "base/logging.h" |
8 #include "base/strings/stringprintf.h" | 9 #include "base/strings/stringprintf.h" |
| 10 #include "services/ui/view_manager/view_registry.h" |
| 11 #include "services/ui/view_manager/view_state.h" |
| 12 #include "services/ui/view_manager/view_stub.h" |
| 13 #include "services/ui/view_manager/view_tree_host_impl.h" |
9 | 14 |
10 namespace view_manager { | 15 namespace view_manager { |
11 | 16 |
12 ViewTreeState::ViewTreeState(mojo::ui::ViewTreePtr view_tree, | 17 ViewTreeState::ViewTreeState( |
13 mojo::ui::ViewTreeTokenPtr view_tree_token, | 18 ViewRegistry* registry, |
14 const std::string& label) | 19 mojo::ui::ViewTreePtr view_tree, |
| 20 mojo::ui::ViewTreeTokenPtr view_tree_token, |
| 21 mojo::InterfaceRequest<mojo::ui::ViewTreeHost> view_tree_host_request, |
| 22 const std::string& label) |
15 : view_tree_(view_tree.Pass()), | 23 : view_tree_(view_tree.Pass()), |
16 view_tree_token_(view_tree_token.Pass()), | 24 view_tree_token_(view_tree_token.Pass()), |
17 label_(label), | 25 label_(label), |
| 26 impl_(new ViewTreeHostImpl(registry, this)), |
| 27 host_binding_(impl_.get(), view_tree_host_request.Pass()), |
18 weak_factory_(this) { | 28 weak_factory_(this) { |
19 DCHECK(view_tree_); | 29 DCHECK(view_tree_); |
20 DCHECK(view_tree_token_); | 30 DCHECK(view_tree_token_); |
| 31 |
| 32 view_tree_.set_connection_error_handler( |
| 33 base::Bind(&ViewRegistry::OnViewTreeDied, base::Unretained(registry), |
| 34 base::Unretained(this), "ViewTree connection closed")); |
| 35 host_binding_.set_connection_error_handler( |
| 36 base::Bind(&ViewRegistry::OnViewTreeDied, base::Unretained(registry), |
| 37 base::Unretained(this), "ViewTreeHost connection closed")); |
21 } | 38 } |
22 | 39 |
23 ViewTreeState::~ViewTreeState() {} | 40 ViewTreeState::~ViewTreeState() {} |
24 | 41 |
25 void ViewTreeState::SetRoot(ViewState* root, uint32_t key) { | 42 void ViewTreeState::LinkRoot(uint32_t key, std::unique_ptr<ViewStub> root) { |
| 43 DCHECK(!root_); |
26 DCHECK(root); | 44 DCHECK(root); |
27 if (root_ != root) { | 45 DCHECK(!root->is_linked()); |
28 ResetRoot(); | 46 root->SetTree(this, key); |
29 root->SetTree(this, key); | 47 root_ = std::move(root); |
30 root_ = root; | |
31 } | |
32 } | 48 } |
33 | 49 |
34 void ViewTreeState::ResetRoot() { | 50 std::unique_ptr<ViewStub> ViewTreeState::UnlinkRoot() { |
35 if (root_) { | 51 DCHECK(root_); |
36 root_->ResetContainer(); | 52 root_->Unlink(); |
37 } | 53 return std::move(root_); |
38 root_ = nullptr; | |
39 } | 54 } |
40 | 55 |
41 const std::string& ViewTreeState::FormattedLabel() { | 56 const std::string& ViewTreeState::FormattedLabel() const { |
42 if (formatted_label_cache_.empty()) { | 57 if (formatted_label_cache_.empty()) { |
43 formatted_label_cache_ = | 58 formatted_label_cache_ = |
44 label_.empty() ? base::StringPrintf("<%d>", view_tree_token_->value) | 59 label_.empty() ? base::StringPrintf("<%d>", view_tree_token_->value) |
45 : base::StringPrintf("<%d:%s>", view_tree_token_->value, | 60 : base::StringPrintf("<%d:%s>", view_tree_token_->value, |
46 label_.c_str()); | 61 label_.c_str()); |
47 } | 62 } |
48 return formatted_label_cache_; | 63 return formatted_label_cache_; |
49 } | 64 } |
50 | 65 |
51 std::ostream& operator<<(std::ostream& os, ViewTreeState* view_tree_state) { | 66 std::ostream& operator<<(std::ostream& os, ViewTreeState* view_tree_state) { |
52 if (!view_tree_state) | 67 if (!view_tree_state) |
53 return os << "null"; | 68 return os << "null"; |
54 return os << view_tree_state->FormattedLabel(); | 69 return os << view_tree_state->FormattedLabel(); |
55 } | 70 } |
56 | 71 |
57 } // namespace view_manager | 72 } // namespace view_manager |
OLD | NEW |