• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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/sync/test/integration/extensions_helper.h"
6 
7 #include <cstring>
8 
9 #include "base/logging.h"
10 #include "base/strings/string_number_conversions.h"
11 #include "base/strings/string_util.h"
12 #include "chrome/browser/profiles/profile.h"
13 #include "chrome/browser/sync/test/integration/sync_datatype_helper.h"
14 #include "chrome/browser/sync/test/integration/sync_extension_helper.h"
15 #include "extensions/common/manifest.h"
16 
17 using sync_datatype_helper::test;
18 
19 namespace extensions_helper {
20 
21 const char extension_name_prefix[] = "fakeextension";
22 
HasSameExtensionsAsVerifier(int index)23 bool HasSameExtensionsAsVerifier(int index) {
24   return SyncExtensionHelper::GetInstance()->ExtensionStatesMatch(
25       test()->GetProfile(index), test()->verifier());
26 }
27 
AllProfilesHaveSameExtensionsAsVerifier()28 bool AllProfilesHaveSameExtensionsAsVerifier() {
29   for (int i = 0; i < test()->num_clients(); ++i) {
30     if (!HasSameExtensionsAsVerifier(i)) {
31       LOG(ERROR) << "Profile " << i << " doesn't have the same extensions as"
32                                        " the verifier profile.";
33       return false;
34     }
35   }
36   return true;
37 }
38 
AllProfilesHaveSameExtensions()39 bool AllProfilesHaveSameExtensions() {
40   for (int i = 1; i < test()->num_clients(); ++i) {
41     if (!SyncExtensionHelper::GetInstance()->ExtensionStatesMatch(
42         test()->GetProfile(0), test()->GetProfile(i))) {
43       LOG(ERROR) << "Profile " << i << " doesnt have the same extensions as"
44                                        " profile 0.";
45       return false;
46     }
47   }
48   return true;
49 }
50 
51 
InstallExtension(Profile * profile,int index)52 std::string InstallExtension(Profile* profile, int index) {
53   return SyncExtensionHelper::GetInstance()->InstallExtension(
54       profile,
55       CreateFakeExtensionName(index),
56       extensions::Manifest::TYPE_EXTENSION);
57 }
58 
InstallExtensionForAllProfiles(int index)59 std::string InstallExtensionForAllProfiles(int index) {
60   for (int i = 0; i < test()->num_clients(); ++i)
61     InstallExtension(test()->GetProfile(i), index);
62   return InstallExtension(test()->verifier(), index);
63 }
64 
UninstallExtension(Profile * profile,int index)65 void UninstallExtension(Profile* profile, int index) {
66   return SyncExtensionHelper::GetInstance()->UninstallExtension(
67       profile, CreateFakeExtensionName(index));
68 }
69 
GetInstalledExtensions(Profile * profile)70 std::vector<int> GetInstalledExtensions(Profile* profile) {
71   std::vector<int> indices;
72   std::vector<std::string> names =
73       SyncExtensionHelper::GetInstance()->GetInstalledExtensionNames(profile);
74   for (std::vector<std::string>::const_iterator it = names.begin();
75        it != names.end(); ++it) {
76     int index;
77     if (ExtensionNameToIndex(*it, &index)) {
78       indices.push_back(index);
79     }
80   }
81   return indices;
82 }
83 
EnableExtension(Profile * profile,int index)84 void EnableExtension(Profile* profile, int index) {
85   return SyncExtensionHelper::GetInstance()->EnableExtension(
86       profile, CreateFakeExtensionName(index));
87 }
88 
DisableExtension(Profile * profile,int index)89 void DisableExtension(Profile* profile, int index) {
90   return SyncExtensionHelper::GetInstance()->DisableExtension(
91       profile, CreateFakeExtensionName(index));
92 }
93 
IsExtensionEnabled(Profile * profile,int index)94 bool IsExtensionEnabled(Profile* profile, int index) {
95   return SyncExtensionHelper::GetInstance()->IsExtensionEnabled(
96       profile, CreateFakeExtensionName(index));
97 }
98 
IncognitoEnableExtension(Profile * profile,int index)99 void IncognitoEnableExtension(Profile* profile, int index) {
100   return SyncExtensionHelper::GetInstance()->IncognitoEnableExtension(
101       profile, CreateFakeExtensionName(index));
102 }
103 
IncognitoDisableExtension(Profile * profile,int index)104 void IncognitoDisableExtension(Profile* profile, int index) {
105   return SyncExtensionHelper::GetInstance()->IncognitoDisableExtension(
106       profile, CreateFakeExtensionName(index));
107 }
108 
IsIncognitoEnabled(Profile * profile,int index)109 bool IsIncognitoEnabled(Profile* profile, int index) {
110   return SyncExtensionHelper::GetInstance()->IsIncognitoEnabled(
111       profile, CreateFakeExtensionName(index));
112 }
113 
InstallExtensionsPendingForSync(Profile * profile)114 void InstallExtensionsPendingForSync(Profile* profile) {
115   SyncExtensionHelper::GetInstance()->InstallExtensionsPendingForSync(profile);
116 }
117 
CreateFakeExtensionName(int index)118 std::string CreateFakeExtensionName(int index) {
119   return extension_name_prefix + base::IntToString(index);
120 }
121 
ExtensionNameToIndex(const std::string & name,int * index)122 bool ExtensionNameToIndex(const std::string& name, int* index) {
123   if (!StartsWithASCII(name, extension_name_prefix, true) ||
124       !base::StringToInt(name.substr(strlen(extension_name_prefix)), index)) {
125     LOG(WARNING) << "Unable to convert extension name \"" << name
126                  << "\" to index";
127     return false;
128   }
129   return true;
130 }
131 
132 }  // namespace extensions_helper
133