Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(115)

Side by Side Diff: content/browser/service_worker/service_worker_browsertest.cc

Issue 2569963002: MemoryCoordinator checks if ServiceWorker exists on the suspending process (Closed)
Patch Set: Updated the comment Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 <stddef.h> 5 #include <stddef.h>
6 #include <stdint.h> 6 #include <stdint.h>
7 7
8 #include <map> 8 #include <map>
9 #include <memory> 9 #include <memory>
10 #include <utility> 10 #include <utility>
11 11
12 #include "base/bind.h" 12 #include "base/bind.h"
13 #include "base/callback.h" 13 #include "base/callback.h"
14 #include "base/command_line.h" 14 #include "base/command_line.h"
15 #include "base/json/json_reader.h" 15 #include "base/json/json_reader.h"
16 #include "base/macros.h" 16 #include "base/macros.h"
17 #include "base/memory/ptr_util.h" 17 #include "base/memory/ptr_util.h"
18 #include "base/memory/ref_counted.h" 18 #include "base/memory/ref_counted.h"
19 #include "base/run_loop.h" 19 #include "base/run_loop.h"
20 #include "base/single_thread_task_runner.h" 20 #include "base/single_thread_task_runner.h"
21 #include "base/strings/string16.h" 21 #include "base/strings/string16.h"
22 #include "base/strings/string_number_conversions.h" 22 #include "base/strings/string_number_conversions.h"
23 #include "base/strings/stringprintf.h" 23 #include "base/strings/stringprintf.h"
24 #include "base/strings/utf_string_conversions.h" 24 #include "base/strings/utf_string_conversions.h"
25 #include "base/test/scoped_feature_list.h"
25 #include "base/threading/thread_task_runner_handle.h" 26 #include "base/threading/thread_task_runner_handle.h"
26 #include "base/time/time.h" 27 #include "base/time/time.h"
27 #include "build/build_config.h" 28 #include "build/build_config.h"
28 #include "content/browser/blob_storage/chrome_blob_storage_context.h" 29 #include "content/browser/blob_storage/chrome_blob_storage_context.h"
29 #include "content/browser/cache_storage/cache_storage_cache.h" 30 #include "content/browser/cache_storage/cache_storage_cache.h"
30 #include "content/browser/cache_storage/cache_storage_cache_handle.h" 31 #include "content/browser/cache_storage/cache_storage_cache_handle.h"
31 #include "content/browser/cache_storage/cache_storage_context_impl.h" 32 #include "content/browser/cache_storage/cache_storage_context_impl.h"
32 #include "content/browser/cache_storage/cache_storage_manager.h" 33 #include "content/browser/cache_storage/cache_storage_manager.h"
34 #include "content/browser/memory/memory_coordinator.h"
33 #include "content/browser/service_worker/embedded_worker_instance.h" 35 #include "content/browser/service_worker/embedded_worker_instance.h"
34 #include "content/browser/service_worker/embedded_worker_registry.h" 36 #include "content/browser/service_worker/embedded_worker_registry.h"
35 #include "content/browser/service_worker/embedded_worker_status.h" 37 #include "content/browser/service_worker/embedded_worker_status.h"
36 #include "content/browser/service_worker/service_worker_context_core.h" 38 #include "content/browser/service_worker/service_worker_context_core.h"
37 #include "content/browser/service_worker/service_worker_context_observer.h" 39 #include "content/browser/service_worker/service_worker_context_observer.h"
38 #include "content/browser/service_worker/service_worker_context_wrapper.h" 40 #include "content/browser/service_worker/service_worker_context_wrapper.h"
39 #include "content/browser/service_worker/service_worker_fetch_dispatcher.h" 41 #include "content/browser/service_worker/service_worker_fetch_dispatcher.h"
40 #include "content/browser/service_worker/service_worker_registration.h" 42 #include "content/browser/service_worker/service_worker_registration.h"
41 #include "content/browser/service_worker/service_worker_test_utils.h" 43 #include "content/browser/service_worker/service_worker_test_utils.h"
42 #include "content/browser/service_worker/service_worker_version.h" 44 #include "content/browser/service_worker/service_worker_version.h"
(...skipping 2887 matching lines...) Expand 10 before | Expand all | Expand 10 after
2930 2932
2931 IN_PROC_BROWSER_TEST_P(ServiceWorkerDisableWebSecurityTest, UpdateNoCrash) { 2933 IN_PROC_BROWSER_TEST_P(ServiceWorkerDisableWebSecurityTest, UpdateNoCrash) {
2932 StartServerAndNavigateToSetup(); 2934 StartServerAndNavigateToSetup();
2933 const char kPageUrl[] = "/service_worker/disable_web_security_update.html"; 2935 const char kPageUrl[] = "/service_worker/disable_web_security_update.html";
2934 const char kScopeUrl[] = "/service_worker/scope/"; 2936 const char kScopeUrl[] = "/service_worker/scope/";
2935 const char kWorkerUrl[] = "/service_worker/fetch_event_blob.js"; 2937 const char kWorkerUrl[] = "/service_worker/fetch_event_blob.js";
2936 RegisterServiceWorkerOnCrossOriginServer(kScopeUrl, kWorkerUrl); 2938 RegisterServiceWorkerOnCrossOriginServer(kScopeUrl, kWorkerUrl);
2937 RunTestWithCrossOriginURL(kPageUrl, kScopeUrl); 2939 RunTestWithCrossOriginURL(kPageUrl, kScopeUrl);
2938 } 2940 }
2939 2941
2942 class MemoryCoordinatorWithServiceWorkerTest
2943 : public ServiceWorkerVersionBrowserTest {
2944 public:
2945 MemoryCoordinatorWithServiceWorkerTest() {}
2946
2947 void SetUp() override {
2948 scoped_feature_list_.InitAndEnableFeature(features::kMemoryCoordinator);
2949 ServiceWorkerVersionBrowserTest::SetUp();
2950 }
2951
2952 private:
2953 base::test::ScopedFeatureList scoped_feature_list_;
2954
2955 DISALLOW_COPY_AND_ASSIGN(MemoryCoordinatorWithServiceWorkerTest);
2956 };
2957
2958 class TestMemoryCoordinatorDelegate : public MemoryCoordinatorDelegate {
2959 public:
2960 TestMemoryCoordinatorDelegate() {}
2961 ~TestMemoryCoordinatorDelegate() override {}
2962
2963 bool CanSuspendBackgroundedRenderer(int render_process_id) override {
2964 return true;
2965 }
2966
2967 private:
2968 DISALLOW_COPY_AND_ASSIGN(TestMemoryCoordinatorDelegate);
2969 };
2970
2971 #if !defined(OS_MACOSX)
falken 2016/12/15 05:16:38 Please add a comment about what this test tests an
shimazu 2016/12/19 01:23:04 Done.
2972 IN_PROC_BROWSER_TEST_P(MemoryCoordinatorWithServiceWorkerTest,
2973 CannotSuspendRendererWithServiceWorker) {
2974 StartServerAndNavigateToSetup();
2975 ActivateTestHelper("/service_worker/fetch_event.js", SERVICE_WORKER_OK);
2976
2977 auto* memory_coordinator = MemoryCoordinator::GetInstance();
falken 2016/12/15 05:16:38 nit: personally I prefer MemoryCoordinator* here,
shimazu 2016/12/19 01:23:04 Done.
2978 memory_coordinator->SetDelegateForTesting(
2979 base::MakeUnique<TestMemoryCoordinatorDelegate>());
2980
2981 // Ensures only one process host exists.
2982 ASSERT_EQ(1, CountRenderProcessHosts());
2983 ASSERT_EQ(1u, memory_coordinator->children().size());
2984
2985 // Checks the number of workers.
2986 int render_process_id = memory_coordinator->children().begin()->first;
2987 auto* rph = RenderProcessHost::FromID(render_process_id);
falken 2016/12/15 05:16:38 same here just RenderProcessHost*
shimazu 2016/12/19 01:23:04 Done.
2988 EXPECT_EQ(1u, rph->GetWorkerRefCount());
2989
2990 // A process should be backgrounded to ensure the worker reference count takes
2991 // effect in CanSuspendRenderer().
2992 shell()->web_contents()->WasHidden();
2993 EXPECT_TRUE(rph->IsProcessBackgrounded());
2994
2995 // The process which has service worker thread shouldn't be suspended.
2996 EXPECT_FALSE(memory_coordinator->CanSuspendRenderer(render_process_id));
2997 }
2998 INSTANTIATE_TEST_CASE_P(ServiceWorkerBrowserTest,
2999 MemoryCoordinatorWithServiceWorkerTest,
3000 ::testing::Bool());
3001 #endif
3002
2940 INSTANTIATE_TEST_CASE_P(ServiceWorkerBrowserTest, 3003 INSTANTIATE_TEST_CASE_P(ServiceWorkerBrowserTest,
2941 ServiceWorkerBrowserTest, 3004 ServiceWorkerBrowserTest,
2942 ::testing::Values(true, false)); 3005 ::testing::Values(true, false));
2943 INSTANTIATE_TEST_CASE_P(ServiceWorkerBrowserTest, 3006 INSTANTIATE_TEST_CASE_P(ServiceWorkerBrowserTest,
2944 ServiceWorkerVersionBrowserV8CacheTest, 3007 ServiceWorkerVersionBrowserV8CacheTest,
2945 ::testing::Values(true, false)); 3008 ::testing::Values(true, false));
2946 INSTANTIATE_TEST_CASE_P(ServiceWorkerBrowserTest, 3009 INSTANTIATE_TEST_CASE_P(ServiceWorkerBrowserTest,
2947 ServiceWorkerVersionBrowserTest, 3010 ServiceWorkerVersionBrowserTest,
2948 ::testing::Values(true, false)); 3011 ::testing::Values(true, false));
2949 INSTANTIATE_TEST_CASE_P(ServiceWorkerBrowserTest, 3012 INSTANTIATE_TEST_CASE_P(ServiceWorkerBrowserTest,
(...skipping 12 matching lines...) Expand all
2962 ServiceWorkerV8CacheStrategiesNormalTest, 3025 ServiceWorkerV8CacheStrategiesNormalTest,
2963 ::testing::Values(true, false)); 3026 ::testing::Values(true, false));
2964 INSTANTIATE_TEST_CASE_P(ServiceWorkerBrowserTest, 3027 INSTANTIATE_TEST_CASE_P(ServiceWorkerBrowserTest,
2965 ServiceWorkerV8CacheStrategiesAggressiveTest, 3028 ServiceWorkerV8CacheStrategiesAggressiveTest,
2966 ::testing::Values(true, false)); 3029 ::testing::Values(true, false));
2967 INSTANTIATE_TEST_CASE_P(ServiceWorkerBrowserTest, 3030 INSTANTIATE_TEST_CASE_P(ServiceWorkerBrowserTest,
2968 ServiceWorkerDisableWebSecurityTest, 3031 ServiceWorkerDisableWebSecurityTest,
2969 ::testing::Values(true, false)); 3032 ::testing::Values(true, false));
2970 3033
2971 } // namespace content 3034 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698