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

Side by Side Diff: chrome/browser/renderer_host/browser_render_process_host.cc

Issue 3834003: On Windows, create a new TransportDIB::Handle struct which includes the file (Closed) Base URL: http://src.chromium.org/git/chromium.git
Patch Set: Rebase Created 10 years, 2 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
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 // Represents the browser side of the browser <--> renderer communication 5 // Represents the browser side of the browser <--> renderer communication
6 // channel. There will be one RenderProcessHost per renderer process. 6 // channel. There will be one RenderProcessHost per renderer process.
7 7
8 #include "chrome/browser/renderer_host/browser_render_process_host.h" 8 #include "chrome/browser/renderer_host/browser_render_process_host.h"
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 760 matching lines...) Expand 10 before | Expand all | Expand 10 after
771 int timeout_ms) { 771 int timeout_ms) {
772 if (!channel_.get()) { 772 if (!channel_.get()) {
773 delete msg; 773 delete msg;
774 return false; 774 return false;
775 } 775 }
776 return channel_->SendWithTimeout(msg, timeout_ms); 776 return channel_->SendWithTimeout(msg, timeout_ms);
777 } 777 }
778 778
779 // This is a platform specific function for mapping a transport DIB given its id 779 // This is a platform specific function for mapping a transport DIB given its id
780 TransportDIB* BrowserRenderProcessHost::MapTransportDIB( 780 TransportDIB* BrowserRenderProcessHost::MapTransportDIB(
781 TransportDIB::Id dib_id) { 781 TransportDIB::Id dib_id, TransportDIB::Handle dib_handle) {
782 #if defined(OS_WIN) 782 TransportDIB::ScopedHandle scoped_handle(dib_handle);
783 // On Windows we need to duplicate the handle from the remote process 783 #if defined(OS_MACOSX)
784 HANDLE section = win_util::GetSectionFromProcess(
785 dib_id.handle, GetHandle(), false /* read write */);
786 return TransportDIB::Map(section);
787 #elif defined(OS_MACOSX)
788 // On OSX, the browser allocates all DIBs and keeps a file descriptor around 784 // On OSX, the browser allocates all DIBs and keeps a file descriptor around
789 // for each. 785 // for each.
790 return widget_helper_->MapTransportDIB(dib_id); 786 return widget_helper_->MapTransportDIB(dib_id);
791 #elif defined(OS_POSIX) 787 #else
792 return TransportDIB::Map(dib_id); 788 return TransportDIB::Map(scoped_handle.release());
793 #endif // defined(OS_POSIX) 789 #endif
794 } 790 }
795 791
796 TransportDIB* BrowserRenderProcessHost::GetTransportDIB( 792 TransportDIB* BrowserRenderProcessHost::GetTransportDIB(
797 TransportDIB::Id dib_id) { 793 TransportDIB::Id dib_id, TransportDIB::Handle dib_handle) {
794 TransportDIB::ScopedHandle scoped_handle(dib_handle);
798 const std::map<TransportDIB::Id, TransportDIB*>::iterator 795 const std::map<TransportDIB::Id, TransportDIB*>::iterator
799 i = cached_dibs_.find(dib_id); 796 i = cached_dibs_.find(dib_id);
800 if (i != cached_dibs_.end()) { 797 if (i != cached_dibs_.end()) {
801 cached_dibs_cleaner_.Reset(); 798 cached_dibs_cleaner_.Reset();
802 return i->second; 799 return i->second;
803 } 800 }
804 801
805 TransportDIB* dib = MapTransportDIB(dib_id); 802 TransportDIB* dib = MapTransportDIB(dib_id, scoped_handle.release());
806 if (!dib) 803 if (!dib)
807 return NULL; 804 return NULL;
808 805
809 if (cached_dibs_.size() >= MAX_MAPPED_TRANSPORT_DIBS) { 806 if (cached_dibs_.size() >= MAX_MAPPED_TRANSPORT_DIBS) {
810 // Clean a single entry from the cache 807 // Clean a single entry from the cache
811 std::map<TransportDIB::Id, TransportDIB*>::iterator smallest_iterator; 808 std::map<TransportDIB::Id, TransportDIB*>::iterator smallest_iterator;
812 size_t smallest_size = std::numeric_limits<size_t>::max(); 809 size_t smallest_size = std::numeric_limits<size_t>::max();
813 810
814 for (std::map<TransportDIB::Id, TransportDIB*>::iterator 811 for (std::map<TransportDIB::Id, TransportDIB*>::iterator
815 i = cached_dibs_.begin(); i != cached_dibs_.end(); ++i) { 812 i = cached_dibs_.begin(); i != cached_dibs_.end(); ++i) {
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after
1129 IPC::InvalidPlatformFileForTransit(), 1126 IPC::InvalidPlatformFileForTransit(),
1130 std::vector<std::string>(), 1127 std::vector<std::string>(),
1131 std::string(), 1128 std::string(),
1132 false)); 1129 false));
1133 } 1130 }
1134 } 1131 }
1135 1132
1136 void BrowserRenderProcessHost::EnableAutoSpellCorrect(bool enable) { 1133 void BrowserRenderProcessHost::EnableAutoSpellCorrect(bool enable) {
1137 Send(new ViewMsg_SpellChecker_EnableAutoSpellCorrect(enable)); 1134 Send(new ViewMsg_SpellChecker_EnableAutoSpellCorrect(enable));
1138 } 1135 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698