12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/extensions/extension_web_ui_override_registrar.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/lazy_instance.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/extension_web_ui.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/profiles/profile.h"
100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "extensions/browser/extension_registry.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace extensions {
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)ExtensionWebUIOverrideRegistrar::ExtensionWebUIOverrideRegistrar(
15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    content::BrowserContext* context)
160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    : extension_registry_observer_(this) {
170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  extension_registry_observer_.Add(ExtensionRegistry::Get(context));
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)ExtensionWebUIOverrideRegistrar::~ExtensionWebUIOverrideRegistrar() {
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvoid ExtensionWebUIOverrideRegistrar::OnExtensionLoaded(
240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    content::BrowserContext* browser_context,
250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    const Extension* extension) {
260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  ExtensionWebUI::RegisterChromeURLOverrides(
270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      Profile::FromBrowserContext(browser_context),
280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      URLOverrides::GetChromeURLOverrides(extension));
290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}
300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
310529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvoid ExtensionWebUIOverrideRegistrar::OnExtensionUnloaded(
320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    content::BrowserContext* browser_context,
330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    const Extension* extension,
340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    UnloadedExtensionInfo::Reason reason) {
350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  ExtensionWebUI::UnregisterChromeURLOverrides(
360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      Profile::FromBrowserContext(browser_context),
370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      URLOverrides::GetChromeURLOverrides(extension));
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)static base::LazyInstance<
41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    BrowserContextKeyedAPIFactory<ExtensionWebUIOverrideRegistrar> > g_factory =
42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    LAZY_INSTANCE_INITIALIZER;
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static
45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)BrowserContextKeyedAPIFactory<ExtensionWebUIOverrideRegistrar>*
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)ExtensionWebUIOverrideRegistrar::GetFactoryInstance() {
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return g_factory.Pointer();
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace extensions
51