| 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/android/webapk/webapk_installer.h" | 5 #include "chrome/browser/android/webapk/webapk_installer.h" |
| 6 | 6 |
| 7 #include <jni.h> | 7 #include <jni.h> |
| 8 #include <memory> | 8 #include <memory> |
| 9 #include <string> | 9 #include <string> |
| 10 | 10 |
| 11 #include "base/android/field_trial_list.h" | |
| 12 #include "base/android/scoped_java_ref.h" | 11 #include "base/android/scoped_java_ref.h" |
| 13 #include "base/bind.h" | 12 #include "base/bind.h" |
| 14 #include "base/callback_forward.h" | 13 #include "base/callback_forward.h" |
| 15 #include "base/feature_list.h" | 14 #include "base/command_line.h" |
| 16 #include "base/files/file_path.h" | 15 #include "base/files/file_path.h" |
| 17 #include "base/memory/ptr_util.h" | |
| 18 #include "base/memory/ref_counted.h" | 16 #include "base/memory/ref_counted.h" |
| 19 #include "base/run_loop.h" | 17 #include "base/run_loop.h" |
| 20 #include "base/single_thread_task_runner.h" | 18 #include "base/single_thread_task_runner.h" |
| 21 #include "base/test/scoped_feature_list.h" | |
| 22 #include "base/threading/thread_task_runner_handle.h" | 19 #include "base/threading/thread_task_runner_handle.h" |
| 23 #include "chrome/browser/android/chrome_feature_list.h" | |
| 24 #include "chrome/browser/android/shortcut_info.h" | 20 #include "chrome/browser/android/shortcut_info.h" |
| 25 #include "chrome/browser/android/webapk/webapk.pb.h" | 21 #include "chrome/browser/android/webapk/webapk.pb.h" |
| 26 #include "chrome/common/chrome_switches.h" | 22 #include "chrome/common/chrome_switches.h" |
| 27 #include "components/variations/variations_associated_data.h" | |
| 28 #include "content/public/browser/browser_thread.h" | 23 #include "content/public/browser/browser_thread.h" |
| 29 #include "content/public/test/test_browser_thread_bundle.h" | 24 #include "content/public/test/test_browser_thread_bundle.h" |
| 30 #include "net/test/embedded_test_server/embedded_test_server.h" | 25 #include "net/test/embedded_test_server/embedded_test_server.h" |
| 31 #include "net/test/embedded_test_server/http_request.h" | 26 #include "net/test/embedded_test_server/http_request.h" |
| 32 #include "net/test/embedded_test_server/http_response.h" | 27 #include "net/test/embedded_test_server/http_response.h" |
| 33 #include "net/url_request/url_request_test_util.h" | 28 #include "net/url_request/url_request_test_util.h" |
| 34 #include "testing/gtest/include/gtest/gtest.h" | 29 #include "testing/gtest/include/gtest/gtest.h" |
| 35 #include "third_party/skia/include/core/SkBitmap.h" | 30 #include "third_party/skia/include/core/SkBitmap.h" |
| 36 #include "url/gurl.h" | 31 #include "url/gurl.h" |
| 37 | 32 |
| 38 namespace { | 33 namespace { |
| 39 | 34 |
| 40 const base::FilePath::CharType kTestDataDir[] = | 35 const base::FilePath::CharType kTestDataDir[] = |
| 41 FILE_PATH_LITERAL("chrome/test/data"); | 36 FILE_PATH_LITERAL("chrome/test/data"); |
| 42 | 37 |
| 43 // Mock field trial name and field trial group to use for "WebApks" feature. | |
| 44 const char kFieldTrialName[] = "MockFieldTrial"; | |
| 45 const char kFieldTrialGroup[] = "MockFieldTrialGroup"; | |
| 46 | |
| 47 // URL of mock WebAPK server. | 38 // URL of mock WebAPK server. |
| 48 const char* kServerUrl = "/webapkserver/"; | 39 const char* kServerUrl = "/webapkserver/"; |
| 49 | 40 |
| 50 // The best icon URL from Web Manifest. We use a random file in the test data | 41 // The best icon URL from Web Manifest. We use a random file in the test data |
| 51 // directory. Since WebApkInstaller does not try to decode the file as an image | 42 // directory. Since WebApkInstaller does not try to decode the file as an image |
| 52 // it is OK that the file is not an image. | 43 // it is OK that the file is not an image. |
| 53 const char* kBestIconUrl = "/simple.html"; | 44 const char* kBestIconUrl = "/simple.html"; |
| 54 | 45 |
| 55 // URL of file to download from the WebAPK server. We use a random file in the | 46 // URL of file to download from the WebAPK server. We use a random file in the |
| 56 // test data directory. | 47 // test data directory. |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 186 | 177 |
| 187 } // anonymous namespace | 178 } // anonymous namespace |
| 188 | 179 |
| 189 class WebApkInstallerTest : public ::testing::Test { | 180 class WebApkInstallerTest : public ::testing::Test { |
| 190 public: | 181 public: |
| 191 typedef base::Callback<std::unique_ptr<net::test_server::HttpResponse>(void)> | 182 typedef base::Callback<std::unique_ptr<net::test_server::HttpResponse>(void)> |
| 192 WebApkResponseBuilder; | 183 WebApkResponseBuilder; |
| 193 | 184 |
| 194 WebApkInstallerTest() | 185 WebApkInstallerTest() |
| 195 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP) {} | 186 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP) {} |
| 196 ~WebApkInstallerTest() override { | 187 ~WebApkInstallerTest() override {} |
| 197 variations::testing::ClearAllVariationParams(); | |
| 198 } | |
| 199 | 188 |
| 200 void SetUp() override { | 189 void SetUp() override { |
| 201 test_server_.AddDefaultHandlers(base::FilePath(kTestDataDir)); | 190 test_server_.AddDefaultHandlers(base::FilePath(kTestDataDir)); |
| 202 test_server_.RegisterRequestHandler( | 191 test_server_.RegisterRequestHandler( |
| 203 base::Bind(&WebApkInstallerTest::HandleWebApkRequest, | 192 base::Bind(&WebApkInstallerTest::HandleWebApkRequest, |
| 204 base::Unretained(this))); | 193 base::Unretained(this))); |
| 205 ASSERT_TRUE(test_server_.Start()); | 194 ASSERT_TRUE(test_server_.Start()); |
| 206 | 195 |
| 207 field_trial_list_.reset(new base::FieldTrialList(nullptr)); | |
| 208 base::FieldTrial* field_trial = base::FieldTrialList::CreateFieldTrial( | |
| 209 kFieldTrialName, kFieldTrialGroup); | |
| 210 std::unique_ptr<base::FeatureList> feature_list = | |
| 211 base::MakeUnique<base::FeatureList>(); | |
| 212 feature_list->RegisterFieldTrialOverride( | |
| 213 chrome::android::kWebApks.name, | |
| 214 base::FeatureList::OVERRIDE_ENABLE_FEATURE, field_trial); | |
| 215 scoped_feature_list_.InitWithFeatureList(std::move(feature_list)); | |
| 216 | |
| 217 SetDefaults(); | 196 SetDefaults(); |
| 218 } | 197 } |
| 219 | 198 |
| 220 // Sets the best Web Manifest's icon URL. | 199 // Sets the best Web Manifest's icon URL. |
| 221 void SetBestIconUrl(const GURL& best_icon_url) { | 200 void SetBestIconUrl(const GURL& best_icon_url) { |
| 222 best_icon_url_ = best_icon_url; | 201 best_icon_url_ = best_icon_url; |
| 223 } | 202 } |
| 224 | 203 |
| 225 // Sets the URL to send the webapk::CreateWebApkRequest to. WebApkInstaller | 204 // Sets the URL to send the webapk::CreateWebApkRequest to. WebApkInstaller |
| 226 // should fail if the URL is not |kServerUrl|. | 205 // should fail if the URL is not |kServerUrl|. |
| 227 void SetWebApkServerUrl(const GURL& server_url) { | 206 void SetWebApkServerUrl(const GURL& server_url) { |
| 228 variations::testing::ClearAllVariationParams(); | 207 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
| 229 std::map<std::string, std::string> params; | 208 switches::kWebApkServerUrl, server_url.spec()); |
| 230 params["ServerUrl"] = server_url.spec(); | |
| 231 ASSERT_TRUE(variations::AssociateVariationParams(kFieldTrialName, | |
| 232 kFieldTrialGroup, params)); | |
| 233 } | 209 } |
| 234 | 210 |
| 235 // Sets the function that should be used to build the response to the | 211 // Sets the function that should be used to build the response to the |
| 236 // WebAPK creation request. | 212 // WebAPK creation request. |
| 237 void SetWebApkResponseBuilder(const WebApkResponseBuilder& builder) { | 213 void SetWebApkResponseBuilder(const WebApkResponseBuilder& builder) { |
| 238 webapk_response_builder_ = builder; | 214 webapk_response_builder_ = builder; |
| 239 } | 215 } |
| 240 | 216 |
| 241 std::unique_ptr<WebApkInstallerRunner> CreateWebApkInstallerRunner() { | 217 std::unique_ptr<WebApkInstallerRunner> CreateWebApkInstallerRunner() { |
| 242 return std::unique_ptr<WebApkInstallerRunner>( | 218 return std::unique_ptr<WebApkInstallerRunner>( |
| (...skipping 17 matching lines...) Expand all Loading... |
| 260 std::unique_ptr<net::test_server::HttpResponse> HandleWebApkRequest( | 236 std::unique_ptr<net::test_server::HttpResponse> HandleWebApkRequest( |
| 261 const net::test_server::HttpRequest& request) { | 237 const net::test_server::HttpRequest& request) { |
| 262 return (request.relative_url == kServerUrl) | 238 return (request.relative_url == kServerUrl) |
| 263 ? webapk_response_builder_.Run() | 239 ? webapk_response_builder_.Run() |
| 264 : std::unique_ptr<net::test_server::HttpResponse>(); | 240 : std::unique_ptr<net::test_server::HttpResponse>(); |
| 265 } | 241 } |
| 266 | 242 |
| 267 content::TestBrowserThreadBundle thread_bundle_; | 243 content::TestBrowserThreadBundle thread_bundle_; |
| 268 net::EmbeddedTestServer test_server_; | 244 net::EmbeddedTestServer test_server_; |
| 269 | 245 |
| 270 std::unique_ptr<base::FieldTrialList> field_trial_list_; | |
| 271 base::test::ScopedFeatureList scoped_feature_list_; | |
| 272 | |
| 273 // Web Manifest's icon URL. | 246 // Web Manifest's icon URL. |
| 274 GURL best_icon_url_; | 247 GURL best_icon_url_; |
| 275 | 248 |
| 276 // Builds response to the WebAPK creation request. | 249 // Builds response to the WebAPK creation request. |
| 277 WebApkResponseBuilder webapk_response_builder_; | 250 WebApkResponseBuilder webapk_response_builder_; |
| 278 | 251 |
| 279 DISALLOW_COPY_AND_ASSIGN(WebApkInstallerTest); | 252 DISALLOW_COPY_AND_ASSIGN(WebApkInstallerTest); |
| 280 }; | 253 }; |
| 281 | 254 |
| 282 // Test installation succeeding. | 255 // Test installation succeeding. |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 351 runner->RunInstallWebApk(); | 324 runner->RunInstallWebApk(); |
| 352 EXPECT_FALSE(runner->success()); | 325 EXPECT_FALSE(runner->success()); |
| 353 } | 326 } |
| 354 | 327 |
| 355 // Test update succeeding. | 328 // Test update succeeding. |
| 356 TEST_F(WebApkInstallerTest, UpdateSuccess) { | 329 TEST_F(WebApkInstallerTest, UpdateSuccess) { |
| 357 std::unique_ptr<WebApkInstallerRunner> runner = CreateWebApkInstallerRunner(); | 330 std::unique_ptr<WebApkInstallerRunner> runner = CreateWebApkInstallerRunner(); |
| 358 runner->RunUpdateWebApk(); | 331 runner->RunUpdateWebApk(); |
| 359 EXPECT_TRUE(runner->success()); | 332 EXPECT_TRUE(runner->success()); |
| 360 } | 333 } |
| OLD | NEW |