OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/chromeos/printing/printers_manager.h" | 5 #include "chrome/browser/chromeos/printing/printers_manager.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
79 private: | 79 private: |
80 base::Optional<Printer> last_added_; | 80 base::Optional<Printer> last_added_; |
81 base::Optional<Printer> last_updated_; | 81 base::Optional<Printer> last_updated_; |
82 base::Optional<Printer> last_removed_; | 82 base::Optional<Printer> last_removed_; |
83 }; | 83 }; |
84 | 84 |
85 } // namespace | 85 } // namespace |
86 | 86 |
87 class PrintersManagerTest : public testing::Test { | 87 class PrintersManagerTest : public testing::Test { |
88 protected: | 88 protected: |
89 PrintersManagerTest() : profile_(base::MakeUnique<TestingProfile>()) { | 89 PrintersManagerTest() |
90 thread_bundle_ = base::MakeUnique<content::TestBrowserThreadBundle>(); | 90 : manager_( |
91 | 91 &profile_, |
92 auto sync_bridge = base::MakeUnique<PrintersSyncBridge>( | 92 base::MakeUnique<PrintersSyncBridge>( |
93 base::Bind(&syncer::ModelTypeStore::CreateInMemoryStoreForTest, | 93 base::Bind(&syncer::ModelTypeStore::CreateInMemoryStoreForTest, |
94 syncer::PRINTERS), | 94 syncer::PRINTERS), |
95 base::BindRepeating( | 95 base::BindRepeating( |
96 base::IgnoreResult(&base::debug::DumpWithoutCrashing))); | 96 base::IgnoreResult(&base::debug::DumpWithoutCrashing)))) { |
97 | |
98 manager_ = base::MakeUnique<PrintersManager>(profile_.get(), | |
99 std::move(sync_bridge)); | |
100 | |
101 base::RunLoop().RunUntilIdle(); | 97 base::RunLoop().RunUntilIdle(); |
102 } | 98 } |
103 | 99 |
104 ~PrintersManagerTest() override { | 100 // Must outlive |profile_|. |
105 manager_.reset(); | 101 content::TestBrowserThreadBundle thread_bundle_; |
106 | 102 |
107 // Explicitly release the profile before the thread_bundle. Otherwise, the | 103 // Must outlive |manager_|. |
108 // profile destructor throws an error. | 104 TestingProfile profile_; |
109 profile_.reset(); | |
110 thread_bundle_.reset(); | |
111 } | |
112 | 105 |
113 std::unique_ptr<TestingProfile> profile_; | 106 PrintersManager manager_; |
114 std::unique_ptr<PrintersManager> manager_; | |
115 | |
116 private: | |
117 std::unique_ptr<content::TestBrowserThreadBundle> thread_bundle_; | |
118 }; | 107 }; |
119 | 108 |
120 TEST_F(PrintersManagerTest, AddPrinter) { | 109 TEST_F(PrintersManagerTest, AddPrinter) { |
121 LoggingObserver observer; | 110 LoggingObserver observer; |
122 manager_->AddObserver(&observer); | 111 manager_.AddObserver(&observer); |
123 manager_->RegisterPrinter(base::MakeUnique<Printer>(kPrinterId)); | 112 manager_.RegisterPrinter(base::MakeUnique<Printer>(kPrinterId)); |
124 | 113 |
125 auto printers = manager_->GetPrinters(); | 114 auto printers = manager_.GetPrinters(); |
126 ASSERT_EQ(1U, printers.size()); | 115 ASSERT_EQ(1U, printers.size()); |
127 EXPECT_EQ(kPrinterId, printers[0]->id()); | 116 EXPECT_EQ(kPrinterId, printers[0]->id()); |
128 EXPECT_EQ(Printer::Source::SRC_USER_PREFS, printers[0]->source()); | 117 EXPECT_EQ(Printer::Source::SRC_USER_PREFS, printers[0]->source()); |
129 | 118 |
130 EXPECT_TRUE(observer.AddCalled()); | 119 EXPECT_TRUE(observer.AddCalled()); |
131 EXPECT_FALSE(observer.UpdateCalled()); | 120 EXPECT_FALSE(observer.UpdateCalled()); |
132 } | 121 } |
133 | 122 |
134 TEST_F(PrintersManagerTest, UpdatePrinterAssignsId) { | 123 TEST_F(PrintersManagerTest, UpdatePrinterAssignsId) { |
135 manager_->RegisterPrinter(base::MakeUnique<Printer>()); | 124 manager_.RegisterPrinter(base::MakeUnique<Printer>()); |
136 | 125 |
137 auto printers = manager_->GetPrinters(); | 126 auto printers = manager_.GetPrinters(); |
138 ASSERT_EQ(1U, printers.size()); | 127 ASSERT_EQ(1U, printers.size()); |
139 EXPECT_FALSE(printers[0]->id().empty()); | 128 EXPECT_FALSE(printers[0]->id().empty()); |
140 } | 129 } |
141 | 130 |
142 TEST_F(PrintersManagerTest, UpdatePrinter) { | 131 TEST_F(PrintersManagerTest, UpdatePrinter) { |
143 manager_->RegisterPrinter(base::MakeUnique<Printer>(kPrinterId)); | 132 manager_.RegisterPrinter(base::MakeUnique<Printer>(kPrinterId)); |
144 auto updated_printer = base::MakeUnique<Printer>(kPrinterId); | 133 auto updated_printer = base::MakeUnique<Printer>(kPrinterId); |
145 updated_printer->set_uri(kUri); | 134 updated_printer->set_uri(kUri); |
146 | 135 |
147 // Register observer so it only receives the update event. | 136 // Register observer so it only receives the update event. |
148 LoggingObserver observer; | 137 LoggingObserver observer; |
149 manager_->AddObserver(&observer); | 138 manager_.AddObserver(&observer); |
150 | 139 |
151 manager_->RegisterPrinter(std::move(updated_printer)); | 140 manager_.RegisterPrinter(std::move(updated_printer)); |
152 | 141 |
153 auto printers = manager_->GetPrinters(); | 142 auto printers = manager_.GetPrinters(); |
154 ASSERT_EQ(1U, printers.size()); | 143 ASSERT_EQ(1U, printers.size()); |
155 EXPECT_EQ(kUri, printers[0]->uri()); | 144 EXPECT_EQ(kUri, printers[0]->uri()); |
156 | 145 |
157 EXPECT_TRUE(observer.UpdateCalled()); | 146 EXPECT_TRUE(observer.UpdateCalled()); |
158 EXPECT_FALSE(observer.AddCalled()); | 147 EXPECT_FALSE(observer.AddCalled()); |
159 } | 148 } |
160 | 149 |
161 TEST_F(PrintersManagerTest, RemovePrinter) { | 150 TEST_F(PrintersManagerTest, RemovePrinter) { |
162 manager_->RegisterPrinter(base::MakeUnique<Printer>("OtherUUID")); | 151 manager_.RegisterPrinter(base::MakeUnique<Printer>("OtherUUID")); |
163 manager_->RegisterPrinter(base::MakeUnique<Printer>(kPrinterId)); | 152 manager_.RegisterPrinter(base::MakeUnique<Printer>(kPrinterId)); |
164 manager_->RegisterPrinter(base::MakeUnique<Printer>()); | 153 manager_.RegisterPrinter(base::MakeUnique<Printer>()); |
165 | 154 |
166 manager_->RemovePrinter(kPrinterId); | 155 manager_.RemovePrinter(kPrinterId); |
167 | 156 |
168 auto printers = manager_->GetPrinters(); | 157 auto printers = manager_.GetPrinters(); |
169 ASSERT_EQ(2U, printers.size()); | 158 ASSERT_EQ(2U, printers.size()); |
170 EXPECT_NE(kPrinterId, printers.at(0)->id()); | 159 EXPECT_NE(kPrinterId, printers.at(0)->id()); |
171 EXPECT_NE(kPrinterId, printers.at(1)->id()); | 160 EXPECT_NE(kPrinterId, printers.at(1)->id()); |
172 } | 161 } |
173 | 162 |
174 // Tests for policy printers | 163 // Tests for policy printers |
175 | 164 |
176 TEST_F(PrintersManagerTest, RecommendedPrinters) { | 165 TEST_F(PrintersManagerTest, RecommendedPrinters) { |
177 std::string first_printer = | 166 std::string first_printer = |
178 R"json({ | 167 R"json({ |
179 "display_name": "Color Laser", | 168 "display_name": "Color Laser", |
180 "description": "The printer next to the water cooler.", | 169 "description": "The printer next to the water cooler.", |
181 "manufacturer": "Printer Manufacturer", | 170 "manufacturer": "Printer Manufacturer", |
182 "model":"Color Laser 2004", | 171 "model":"Color Laser 2004", |
183 "uri":"ipps://print-server.intranet.example.com:443/ipp/cl2k4", | 172 "uri":"ipps://print-server.intranet.example.com:443/ipp/cl2k4", |
184 "uuid":"1c395fdb-5d93-4904-b246-b2c046e79d12", | 173 "uuid":"1c395fdb-5d93-4904-b246-b2c046e79d12", |
185 "ppd_resource":{ | 174 "ppd_resource":{ |
186 "effective_manufacturer": "MakesPrinters", | 175 "effective_manufacturer": "MakesPrinters", |
187 "effective_model":"ColorLaser2k4" | 176 "effective_model":"ColorLaser2k4" |
188 } | 177 } |
189 })json"; | 178 })json"; |
190 | 179 |
191 std::string second_printer = kLexJson; | 180 std::string second_printer = kLexJson; |
192 | 181 |
193 auto value = base::MakeUnique<base::ListValue>(); | 182 auto value = base::MakeUnique<base::ListValue>(); |
194 value->AppendString(first_printer); | 183 value->AppendString(first_printer); |
195 value->AppendString(second_printer); | 184 value->AppendString(second_printer); |
196 | 185 |
197 sync_preferences::TestingPrefServiceSyncable* prefs = | 186 sync_preferences::TestingPrefServiceSyncable* prefs = |
198 profile_->GetTestingPrefService(); | 187 profile_.GetTestingPrefService(); |
199 // TestingPrefSyncableService assumes ownership of |value|. | 188 // TestingPrefSyncableService assumes ownership of |value|. |
200 prefs->SetManagedPref(prefs::kRecommendedNativePrinters, std::move(value)); | 189 prefs->SetManagedPref(prefs::kRecommendedNativePrinters, std::move(value)); |
201 | 190 |
202 auto printers = manager_->GetRecommendedPrinters(); | 191 auto printers = manager_.GetRecommendedPrinters(); |
203 ASSERT_EQ(2U, printers.size()); | 192 ASSERT_EQ(2U, printers.size()); |
204 EXPECT_EQ("Color Laser", printers[0]->display_name()); | 193 EXPECT_EQ("Color Laser", printers[0]->display_name()); |
205 EXPECT_EQ("ipp://192.168.1.5", printers[1]->uri()); | 194 EXPECT_EQ("ipp://192.168.1.5", printers[1]->uri()); |
206 EXPECT_EQ(Printer::Source::SRC_POLICY, printers[1]->source()); | 195 EXPECT_EQ(Printer::Source::SRC_POLICY, printers[1]->source()); |
207 } | 196 } |
208 | 197 |
209 TEST_F(PrintersManagerTest, GetRecommendedPrinter) { | 198 TEST_F(PrintersManagerTest, GetRecommendedPrinter) { |
210 std::string printer = kLexJson; | 199 std::string printer = kLexJson; |
211 auto value = base::MakeUnique<base::ListValue>(); | 200 auto value = base::MakeUnique<base::ListValue>(); |
212 value->AppendString(printer); | 201 value->AppendString(printer); |
213 | 202 |
214 sync_preferences::TestingPrefServiceSyncable* prefs = | 203 sync_preferences::TestingPrefServiceSyncable* prefs = |
215 profile_->GetTestingPrefService(); | 204 profile_.GetTestingPrefService(); |
216 // TestingPrefSyncableService assumes ownership of |value|. | 205 // TestingPrefSyncableService assumes ownership of |value|. |
217 prefs->SetManagedPref(prefs::kRecommendedNativePrinters, std::move(value)); | 206 prefs->SetManagedPref(prefs::kRecommendedNativePrinters, std::move(value)); |
218 | 207 |
219 auto printers = manager_->GetRecommendedPrinters(); | 208 auto printers = manager_.GetRecommendedPrinters(); |
220 | 209 |
221 const Printer& from_list = *(printers.front()); | 210 const Printer& from_list = *(printers.front()); |
222 std::unique_ptr<Printer> retrieved = manager_->GetPrinter(from_list.id()); | 211 std::unique_ptr<Printer> retrieved = manager_.GetPrinter(from_list.id()); |
223 | 212 |
224 EXPECT_EQ(from_list.id(), retrieved->id()); | 213 EXPECT_EQ(from_list.id(), retrieved->id()); |
225 EXPECT_EQ("LexaPrint", from_list.display_name()); | 214 EXPECT_EQ("LexaPrint", from_list.display_name()); |
226 EXPECT_EQ(Printer::Source::SRC_POLICY, from_list.source()); | 215 EXPECT_EQ(Printer::Source::SRC_POLICY, from_list.source()); |
227 } | 216 } |
228 | 217 |
229 TEST_F(PrintersManagerTest, PrinterNotInstalled) { | 218 TEST_F(PrintersManagerTest, PrinterNotInstalled) { |
230 Printer printer(kPrinterId, base::Time::FromInternalValue(1000)); | 219 Printer printer(kPrinterId, base::Time::FromInternalValue(1000)); |
231 EXPECT_FALSE(manager_->IsConfigurationCurrent(printer)); | 220 EXPECT_FALSE(manager_.IsConfigurationCurrent(printer)); |
232 } | 221 } |
233 | 222 |
234 TEST_F(PrintersManagerTest, PrinterIsInstalled) { | 223 TEST_F(PrintersManagerTest, PrinterIsInstalled) { |
235 Printer printer(kPrinterId, base::Time::FromInternalValue(1000)); | 224 Printer printer(kPrinterId, base::Time::FromInternalValue(1000)); |
236 manager_->PrinterInstalled(printer); | 225 manager_.PrinterInstalled(printer); |
237 EXPECT_TRUE(manager_->IsConfigurationCurrent(printer)); | 226 EXPECT_TRUE(manager_.IsConfigurationCurrent(printer)); |
238 } | 227 } |
239 | 228 |
240 TEST_F(PrintersManagerTest, UpdatedPrinterConfiguration) { | 229 TEST_F(PrintersManagerTest, UpdatedPrinterConfiguration) { |
241 Printer printer(kPrinterId, base::Time::FromInternalValue(1000)); | 230 Printer printer(kPrinterId, base::Time::FromInternalValue(1000)); |
242 manager_->PrinterInstalled(printer); | 231 manager_.PrinterInstalled(printer); |
243 | 232 |
244 Printer updated_printer(kPrinterId, base::Time::FromInternalValue(2000)); | 233 Printer updated_printer(kPrinterId, base::Time::FromInternalValue(2000)); |
245 EXPECT_FALSE(manager_->IsConfigurationCurrent(updated_printer)); | 234 EXPECT_FALSE(manager_.IsConfigurationCurrent(updated_printer)); |
246 } | 235 } |
247 | 236 |
248 } // namespace chromeos | 237 } // namespace chromeos |
OLD | NEW |