1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file.
4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#ifndef CHROME_BROWSER_EXTENSIONS_API_SPELLCHECK_SPELLCHECK_API_H_
6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define CHROME_BROWSER_EXTENSIONS_API_SPELLCHECK_SPELLCHECK_API_H_
7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
85c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/scoped_observer.h"
9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "extensions/browser/browser_context_keyed_api_factory.h"
105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "extensions/browser/extension_registry_observer.h"
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace extensions {
135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass ExtensionRegistry;
14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class SpellcheckAPI : public BrowserContextKeyedAPI,
165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                      public ExtensionRegistryObserver {
17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public:
18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  explicit SpellcheckAPI(content::BrowserContext* context);
19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual ~SpellcheckAPI();
20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // BrowserContextKeyedAPI implementation.
22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  static BrowserContextKeyedAPIFactory<SpellcheckAPI>* GetFactoryInstance();
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private:
25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  friend class BrowserContextKeyedAPIFactory<SpellcheckAPI>;
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // ExtensionRegistryObserver implementation.
285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  virtual void OnExtensionLoaded(content::BrowserContext* browser_context,
295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                                 const Extension* extension) OVERRIDE;
305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  virtual void OnExtensionUnloaded(
315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      content::BrowserContext* browser_context,
325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      const Extension* extension,
335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      UnloadedExtensionInfo::Reason reason) OVERRIDE;
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // BrowserContextKeyedAPI implementation.
36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  static const char* service_name() {
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return "SpellcheckAPI";
38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // Listen to extension load, unloaded notifications.
415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver>
425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      extension_registry_observer_;
43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(SpellcheckAPI);
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)template <>
48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void BrowserContextKeyedAPIFactory<SpellcheckAPI>::DeclareFactoryDependencies();
49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace extensions
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif  // CHROME_BROWSER_EXTENSIONS_API_SPELLCHECK_SPELLCHECK_API_H_
53