terminal_extension_helper.cc revision 116680a4aac90f2aa7413d9095a592090648e557
1// Copyright (c) 2012 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#include "chrome/browser/extensions/api/terminal/terminal_extension_helper.h"
6
7#include "chrome/browser/profiles/profile.h"
8#include "chrome/common/extensions/extension_constants.h"
9#include "extensions/browser/extension_registry.h"
10#include "extensions/common/extension.h"
11
12namespace extensions {
13
14namespace {
15
16const char kCroshExtensionEntryPoint[] = "/html/crosh.html";
17
18const Extension* GetTerminalExtension(Profile* profile) {
19  // Search order for terminal extensions.
20  // We prefer hterm-dev, then hterm, then the builtin crosh extension.
21  static const char* const kPossibleAppIds[] = {
22    extension_misc::kHTermDevAppId,
23    extension_misc::kHTermAppId,
24    extension_misc::kCroshBuiltinAppId,
25  };
26
27  // The hterm-dev should be first in the list.
28  DCHECK_EQ(kPossibleAppIds[0], extension_misc::kHTermDevAppId);
29
30  const ExtensionSet& extensions =
31      ExtensionRegistry::Get(profile)->enabled_extensions();
32  for (size_t i = 0; i < arraysize(kPossibleAppIds); ++i) {
33    const extensions::Extension* extension =
34        extensions.GetByID(kPossibleAppIds[i]);
35    if (extension)
36      return extension;
37  }
38
39  return NULL;
40}
41
42}  // namespace
43
44GURL TerminalExtensionHelper::GetCroshExtensionURL(Profile* profile) {
45  GURL url;
46  const extensions::Extension* extension = GetTerminalExtension(profile);
47  if (extension)
48    url = extension->GetResourceURL(kCroshExtensionEntryPoint);
49  return url;
50}
51
52}  // namespace extensions
53