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

Side by Side Diff: extensions/browser/process_manager.cc

Issue 1549643002: Switch to standard integer types in extensions/browser/. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@clean
Patch Set: Created 4 years, 12 months 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
« no previous file with comments | « extensions/browser/process_manager.h ('k') | extensions/browser/process_manager_factory.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "extensions/browser/process_manager.h" 5 #include "extensions/browser/process_manager.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "base/macros.h"
11 #include "base/message_loop/message_loop.h" 12 #include "base/message_loop/message_loop.h"
12 #include "base/metrics/histogram_macros.h" 13 #include "base/metrics/histogram_macros.h"
13 #include "base/stl_util.h" 14 #include "base/stl_util.h"
14 #include "base/time/time.h" 15 #include "base/time/time.h"
15 #include "content/public/browser/browser_context.h" 16 #include "content/public/browser/browser_context.h"
16 #include "content/public/browser/devtools_agent_host.h" 17 #include "content/public/browser/devtools_agent_host.h"
17 #include "content/public/browser/notification_service.h" 18 #include "content/public/browser/notification_service.h"
18 #include "content/public/browser/render_frame_host.h" 19 #include "content/public/browser/render_frame_host.h"
19 #include "content/public/browser/render_process_host.h" 20 #include "content/public/browser/render_process_host.h"
20 #include "content/public/browser/render_view_host.h" 21 #include "content/public/browser/render_view_host.h"
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 // dispatching the suspend event. During this time any events that arrive will 130 // dispatching the suspend event. During this time any events that arrive will
130 // cancel the suspend process and an onSuspendCanceled event will be 131 // cancel the suspend process and an onSuspendCanceled event will be
131 // dispatched to the page. 132 // dispatched to the page.
132 bool is_closing; 133 bool is_closing;
133 134
134 // Stores the value of the incremented 135 // Stores the value of the incremented
135 // ProcessManager::last_background_close_sequence_id_ whenever the extension 136 // ProcessManager::last_background_close_sequence_id_ whenever the extension
136 // is active. A copy of the ID is also passed in the callbacks and IPC 137 // is active. A copy of the ID is also passed in the callbacks and IPC
137 // messages leading up to CloseLazyBackgroundPageNow. The process is aborted 138 // messages leading up to CloseLazyBackgroundPageNow. The process is aborted
138 // if the IDs ever differ due to new activity. 139 // if the IDs ever differ due to new activity.
139 uint64 close_sequence_id; 140 uint64_t close_sequence_id;
140 141
141 // Keeps track of when this page was last suspended. Used for perf metrics. 142 // Keeps track of when this page was last suspended. Used for perf metrics.
142 linked_ptr<base::ElapsedTimer> since_suspended; 143 linked_ptr<base::ElapsedTimer> since_suspended;
143 144
144 BackgroundPageData() 145 BackgroundPageData()
145 : lazy_keepalive_count(0), 146 : lazy_keepalive_count(0),
146 keepalive_impulse(false), 147 keepalive_impulse(false),
147 previous_keepalive_impulse(false), 148 previous_keepalive_impulse(false),
148 is_closing(false), 149 is_closing(false),
149 close_sequence_id(0) {} 150 close_sequence_id(0) {}
(...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after
536 const Extension* extension = 537 const Extension* extension =
537 ExtensionRegistry::Get(browser_context)->enabled_extensions().GetByID( 538 ExtensionRegistry::Get(browser_context)->enabled_extensions().GetByID(
538 extension_id); 539 extension_id);
539 if (!extension) 540 if (!extension)
540 return; 541 return;
541 542
542 ProcessManager::Get(browser_context)->KeepaliveImpulse(extension); 543 ProcessManager::Get(browser_context)->KeepaliveImpulse(extension);
543 } 544 }
544 545
545 void ProcessManager::OnShouldSuspendAck(const std::string& extension_id, 546 void ProcessManager::OnShouldSuspendAck(const std::string& extension_id,
546 uint64 sequence_id) { 547 uint64_t sequence_id) {
547 ExtensionHost* host = GetBackgroundHostForExtension(extension_id); 548 ExtensionHost* host = GetBackgroundHostForExtension(extension_id);
548 if (host && 549 if (host &&
549 sequence_id == background_page_data_[extension_id].close_sequence_id) { 550 sequence_id == background_page_data_[extension_id].close_sequence_id) {
550 host->render_process_host()->Send(new ExtensionMsg_Suspend(extension_id)); 551 host->render_process_host()->Send(new ExtensionMsg_Suspend(extension_id));
551 } 552 }
552 } 553 }
553 554
554 void ProcessManager::OnSuspendAck(const std::string& extension_id) { 555 void ProcessManager::OnSuspendAck(const std::string& extension_id) {
555 background_page_data_[extension_id].is_closing = true; 556 background_page_data_[extension_id].is_closing = true;
556 uint64 sequence_id = background_page_data_[extension_id].close_sequence_id; 557 uint64_t sequence_id = background_page_data_[extension_id].close_sequence_id;
557 base::MessageLoop::current()->PostDelayedTask( 558 base::MessageLoop::current()->PostDelayedTask(
558 FROM_HERE, 559 FROM_HERE,
559 base::Bind(&ProcessManager::CloseLazyBackgroundPageNow, 560 base::Bind(&ProcessManager::CloseLazyBackgroundPageNow,
560 weak_ptr_factory_.GetWeakPtr(), 561 weak_ptr_factory_.GetWeakPtr(),
561 extension_id, 562 extension_id,
562 sequence_id), 563 sequence_id),
563 base::TimeDelta::FromMilliseconds(g_event_page_suspending_time_msec)); 564 base::TimeDelta::FromMilliseconds(g_event_page_suspending_time_msec));
564 } 565 }
565 566
566 void ProcessManager::OnNetworkRequestStarted( 567 void ProcessManager::OnNetworkRequestStarted(
567 content::RenderFrameHost* render_frame_host, 568 content::RenderFrameHost* render_frame_host,
568 uint64 request_id) { 569 uint64_t request_id) {
569 ExtensionHost* host = GetBackgroundHostForExtension( 570 ExtensionHost* host = GetBackgroundHostForExtension(
570 GetExtensionID(render_frame_host)); 571 GetExtensionID(render_frame_host));
571 auto result = pending_network_requests_.insert(request_id); 572 auto result = pending_network_requests_.insert(request_id);
572 DCHECK(result.second) << "Duplicate network request IDs."; 573 DCHECK(result.second) << "Duplicate network request IDs.";
573 if (host && IsFrameInExtensionHost(host, render_frame_host)) { 574 if (host && IsFrameInExtensionHost(host, render_frame_host)) {
574 IncrementLazyKeepaliveCount(host->extension()); 575 IncrementLazyKeepaliveCount(host->extension());
575 host->OnNetworkRequestStarted(request_id); 576 host->OnNetworkRequestStarted(request_id);
576 } 577 }
577 } 578 }
578 579
579 void ProcessManager::OnNetworkRequestDone( 580 void ProcessManager::OnNetworkRequestDone(
580 content::RenderFrameHost* render_frame_host, 581 content::RenderFrameHost* render_frame_host,
581 uint64 request_id) { 582 uint64_t request_id) {
582 ExtensionHost* host = GetBackgroundHostForExtension( 583 ExtensionHost* host = GetBackgroundHostForExtension(
583 GetExtensionID(render_frame_host)); 584 GetExtensionID(render_frame_host));
584 if (host && IsFrameInExtensionHost(host, render_frame_host)) { 585 if (host && IsFrameInExtensionHost(host, render_frame_host)) {
585 host->OnNetworkRequestDone(request_id); 586 host->OnNetworkRequestDone(request_id);
586 if (pending_network_requests_.erase(request_id)) 587 if (pending_network_requests_.erase(request_id))
587 DecrementLazyKeepaliveCount(host->extension()); 588 DecrementLazyKeepaliveCount(host->extension());
588 } 589 }
589 } 590 }
590 591
591 void ProcessManager::CancelSuspend(const Extension* extension) { 592 void ProcessManager::CancelSuspend(const Extension* extension) {
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
812 if (base::MessageLoop::current()) { 813 if (base::MessageLoop::current()) {
813 base::MessageLoop::current()->PostDelayedTask( 814 base::MessageLoop::current()->PostDelayedTask(
814 FROM_HERE, 815 FROM_HERE,
815 base::Bind(&ProcessManager::OnKeepaliveImpulseCheck, 816 base::Bind(&ProcessManager::OnKeepaliveImpulseCheck,
816 weak_ptr_factory_.GetWeakPtr()), 817 weak_ptr_factory_.GetWeakPtr()),
817 base::TimeDelta::FromMilliseconds(g_event_page_idle_time_msec)); 818 base::TimeDelta::FromMilliseconds(g_event_page_idle_time_msec));
818 } 819 }
819 } 820 }
820 821
821 void ProcessManager::OnLazyBackgroundPageIdle(const std::string& extension_id, 822 void ProcessManager::OnLazyBackgroundPageIdle(const std::string& extension_id,
822 uint64 sequence_id) { 823 uint64_t sequence_id) {
823 ExtensionHost* host = GetBackgroundHostForExtension(extension_id); 824 ExtensionHost* host = GetBackgroundHostForExtension(extension_id);
824 if (host && !background_page_data_[extension_id].is_closing && 825 if (host && !background_page_data_[extension_id].is_closing &&
825 sequence_id == background_page_data_[extension_id].close_sequence_id) { 826 sequence_id == background_page_data_[extension_id].close_sequence_id) {
826 // Tell the renderer we are about to close. This is a simple ping that the 827 // Tell the renderer we are about to close. This is a simple ping that the
827 // renderer will respond to. The purpose is to control sequencing: if the 828 // renderer will respond to. The purpose is to control sequencing: if the
828 // extension remains idle until the renderer responds with an ACK, then we 829 // extension remains idle until the renderer responds with an ACK, then we
829 // know that the extension process is ready to shut down. If our 830 // know that the extension process is ready to shut down. If our
830 // close_sequence_id has already changed, then we would ignore the 831 // close_sequence_id has already changed, then we would ignore the
831 // ShouldSuspendAck, so we don't send the ping. 832 // ShouldSuspendAck, so we don't send the ping.
832 host->render_process_host()->Send(new ExtensionMsg_ShouldSuspend( 833 host->render_process_host()->Send(new ExtensionMsg_ShouldSuspend(
833 extension_id, sequence_id)); 834 extension_id, sequence_id));
834 } 835 }
835 } 836 }
836 837
837 void ProcessManager::OnLazyBackgroundPageActive( 838 void ProcessManager::OnLazyBackgroundPageActive(
838 const std::string& extension_id) { 839 const std::string& extension_id) {
839 if (!background_page_data_[extension_id].is_closing) { 840 if (!background_page_data_[extension_id].is_closing) {
840 // Cancel the current close sequence by changing the close_sequence_id, 841 // Cancel the current close sequence by changing the close_sequence_id,
841 // which causes us to ignore the next ShouldSuspendAck. 842 // which causes us to ignore the next ShouldSuspendAck.
842 background_page_data_[extension_id].close_sequence_id = 843 background_page_data_[extension_id].close_sequence_id =
843 ++last_background_close_sequence_id_; 844 ++last_background_close_sequence_id_;
844 } 845 }
845 } 846 }
846 847
847 void ProcessManager::CloseLazyBackgroundPageNow(const std::string& extension_id, 848 void ProcessManager::CloseLazyBackgroundPageNow(const std::string& extension_id,
848 uint64 sequence_id) { 849 uint64_t sequence_id) {
849 ExtensionHost* host = GetBackgroundHostForExtension(extension_id); 850 ExtensionHost* host = GetBackgroundHostForExtension(extension_id);
850 if (host && 851 if (host &&
851 sequence_id == background_page_data_[extension_id].close_sequence_id) { 852 sequence_id == background_page_data_[extension_id].close_sequence_id) {
852 // Handle the case where the keepalive count was increased after the 853 // Handle the case where the keepalive count was increased after the
853 // OnSuspend event was sent. 854 // OnSuspend event was sent.
854 if (background_page_data_[extension_id].lazy_keepalive_count > 0) { 855 if (background_page_data_[extension_id].lazy_keepalive_count > 0) {
855 CancelSuspend(host->extension()); 856 CancelSuspend(host->extension());
856 return; 857 return;
857 } 858 }
858 859
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
976 if (extension && !IncognitoInfo::IsSplitMode(extension)) { 977 if (extension && !IncognitoInfo::IsSplitMode(extension)) {
977 BrowserContext* original_context = 978 BrowserContext* original_context =
978 ExtensionsBrowserClient::Get()->GetOriginalContext(browser_context()); 979 ExtensionsBrowserClient::Get()->GetOriginalContext(browser_context());
979 return ProcessManager::Get(original_context)->GetSiteInstanceForURL(url); 980 return ProcessManager::Get(original_context)->GetSiteInstanceForURL(url);
980 } 981 }
981 982
982 return ProcessManager::GetSiteInstanceForURL(url); 983 return ProcessManager::GetSiteInstanceForURL(url);
983 } 984 }
984 985
985 } // namespace extensions 986 } // namespace extensions
OLDNEW
« no previous file with comments | « extensions/browser/process_manager.h ('k') | extensions/browser/process_manager_factory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698