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
3 // found in the LICENSE file.
4 
5 #include "chrome/browser/task_manager/providers/web_contents/web_contents_tags_manager.h"
6 
7 #include <algorithm>
8 
9 #include "base/memory/singleton.h"
10 #include "chrome/browser/task_manager/providers/web_contents/web_contents_task_provider.h"
11 
12 namespace task_manager {
13 
14 // static
GetInstance()15 WebContentsTagsManager* WebContentsTagsManager::GetInstance() {
16   return base::Singleton<WebContentsTagsManager>::get();
17 }
18 
AddTag(WebContentsTag * tag)19 void WebContentsTagsManager::AddTag(WebContentsTag* tag) {
20   DCHECK(tag);
21   tracked_tags_.push_back(tag);
22 
23   if (provider_)
24     provider_->OnWebContentsTagCreated(tag);
25 }
26 
RemoveTag(WebContentsTag * tag)27 void WebContentsTagsManager::RemoveTag(WebContentsTag* tag) {
28   DCHECK(tag);
29   tracked_tags_.erase(std::find(tracked_tags_.begin(),
30                                 tracked_tags_.end(),
31                                 tag));
32 
33   // No need to inform the provider here. The provider will create an entry
34   // for each WebContents it's tracking which is a WebContentsObserver and
35   // can be used to track the lifetime of the WebContents.
36 
37   // We must however make sure that the provider has already forgotten about the
38   // tag and its associated web_contents.
39   if (provider_)
40     CHECK(!provider_->HasWebContents(tag->web_contents()));
41 }
42 
SetProvider(WebContentsTaskProvider * provider)43 void WebContentsTagsManager::SetProvider(WebContentsTaskProvider* provider) {
44   DCHECK(provider);
45   DCHECK(!provider_);
46   provider_ = provider;
47 }
48 
ClearProvider()49 void WebContentsTagsManager::ClearProvider() {
50   DCHECK(provider_);
51   provider_ = nullptr;
52 }
53 
ClearFromProvider(const WebContentsTag * tag)54 void WebContentsTagsManager::ClearFromProvider(const WebContentsTag* tag) {
55   if (provider_)
56     provider_->OnWebContentsTagRemoved(tag);
57 }
58 
WebContentsTagsManager()59 WebContentsTagsManager::WebContentsTagsManager()
60     : provider_(nullptr) {
61 }
62 
~WebContentsTagsManager()63 WebContentsTagsManager::~WebContentsTagsManager() {
64 }
65 
66 }  // namespace task_manager
67