1392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom// Use of this source code is governed by a BSD-style license that can be
3392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom// found in the LICENSE file.
4392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
5392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#include "content/browser/devtools/devtools_manager.h"
6392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
7392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#include "base/bind.h"
8392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#include "base/message_loop/message_loop.h"
9392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#include "content/browser/devtools/devtools_netlog_observer.h"
10392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#include "content/public/browser/browser_thread.h"
11392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#include "content/public/browser/content_browser_client.h"
12392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#include "content/public/browser/devtools_manager_delegate.h"
13392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
14392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromnamespace content {
15392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
16392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom// static
17392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromDevToolsManager* DevToolsManager::GetInstance() {
18392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom  return Singleton<DevToolsManager>::get();
19392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom}
20392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
21392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromDevToolsManager::DevToolsManager()
22392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom    : delegate_(GetContentClient()->browser()->GetDevToolsManagerDelegate()),
23392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom      client_count_(0) {
24392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom}
25392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
26392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromDevToolsManager::~DevToolsManager() {
27392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom  DCHECK(!client_count_);
28392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom}
29392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
30392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromvoid DevToolsManager::OnClientAttached() {
31392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom  if (!client_count_) {
32392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom    BrowserThread::PostTask(
33392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom        BrowserThread::IO,
34392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom        FROM_HERE,
35392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom        base::Bind(&DevToolsNetLogObserver::Attach));
36392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom  }
37392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom  client_count_++;
38392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom}
39392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
40392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromvoid DevToolsManager::OnClientDetached() {
41392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom  client_count_--;
42392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom  if (!client_count_) {
43392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom    BrowserThread::PostTask(
44392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom        BrowserThread::IO,
45392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom        FROM_HERE,
46392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom        base::Bind(&DevToolsNetLogObserver::Detach));
47392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom  }
48392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom}
49392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
50392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom}  // namespace content
51392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom