15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/search/search_delegate.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/search/search_model.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/search/search_tab_helper.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)SearchDelegate::SearchDelegate(SearchModel* browser_search_model)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : browser_model_(browser_search_model),
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      tab_model_() {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SearchDelegate::~SearchDelegate() {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(!tab_model_) << "All tabs should have been deactivated or closed.";
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SearchDelegate::ModelChanged(const SearchModel::State& old_state,
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                  const SearchModel::State& new_state) {
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser_model_->SetState(new_state);
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchDelegate::OnTabActivated(content::WebContents* web_contents) {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (tab_model_)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    tab_model_->RemoveObserver(this);
27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  tab_model_ = SearchTabHelper::FromWebContents(web_contents)->model();
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser_model_->SetState(tab_model_->state());
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  tab_model_->AddObserver(this);
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchDelegate::OnTabDeactivated(content::WebContents* web_contents) {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StopObservingTab(web_contents);
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchDelegate::OnTabDetached(content::WebContents* web_contents) {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StopObservingTab(web_contents);
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchDelegate::StopObservingTab(content::WebContents* web_contents) {
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SearchTabHelper* search_tab_helper =
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      SearchTabHelper::FromWebContents(web_contents);
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (search_tab_helper->model() == tab_model_) {
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    tab_model_->RemoveObserver(this);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    tab_model_ = NULL;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
48