1// Copyright (c) 2011 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#ifndef CHROME_BROWSER_UI_SEARCH_ENGINES_SEARCH_ENGINE_TAB_HELPER_H_
6#define CHROME_BROWSER_UI_SEARCH_ENGINES_SEARCH_ENGINE_TAB_HELPER_H_
7#pragma once
8
9#include "chrome/browser/ui/find_bar/find_bar_controller.h"
10#include "chrome/browser/ui/find_bar/find_notification_details.h"
11#include "chrome/common/search_provider.h"
12#include "content/browser/tab_contents/tab_contents_observer.h"
13
14class SearchEngineTabHelperDelegate;
15class TabContentsWrapper;
16
17// Per-tab search engine manager. Handles dealing search engine processing
18// functionality.
19class SearchEngineTabHelper : public TabContentsObserver {
20 public:
21  explicit SearchEngineTabHelper(TabContents* tab_contents);
22  virtual ~SearchEngineTabHelper();
23
24  SearchEngineTabHelperDelegate* delegate() const { return delegate_; }
25  void set_delegate(SearchEngineTabHelperDelegate* d) { delegate_ = d; }
26
27  // TabContentsObserver overrides.
28  virtual void DidNavigateMainFramePostCommit(
29      const NavigationController::LoadCommittedDetails& details,
30      const ViewHostMsg_FrameNavigate_Params& params) OVERRIDE;
31  virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
32
33 private:
34  // Handles when a page specifies an OSDD (OpenSearch Description Document).
35  void OnPageHasOSDD(int32 page_id,
36                     const GURL& doc_url,
37                     const search_provider::OSDDType& msg_provider_type);
38
39  // If params has a searchable form, this tries to create a new keyword.
40  void GenerateKeywordIfNecessary(
41      const ViewHostMsg_FrameNavigate_Params& params);
42
43  // Delegate for notifying our owner about stuff. Not owned by us.
44  SearchEngineTabHelperDelegate* delegate_;
45
46  DISALLOW_COPY_AND_ASSIGN(SearchEngineTabHelper);
47};
48
49#endif  // CHROME_BROWSER_UI_SEARCH_ENGINES_SEARCH_ENGINE_TAB_HELPER_H_
50