| 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 |