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

Side by Side Diff: chrome/nacl/nacl_ipc_adapter.cc

Issue 15274002: Do not translate the file open flags other than read/write. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix win_rel build Created 7 years, 7 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 | Annotate | Revision Log
« no previous file with comments | « chrome/nacl/nacl_ipc_adapter.h ('k') | chrome/nacl/nacl_ipc_adapter_unittest.cc » ('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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/nacl/nacl_ipc_adapter.h" 5 #include "chrome/nacl/nacl_ipc_adapter.h"
6 6
7 #include <limits.h> 7 #include <limits.h>
8 #include <string.h> 8 #include <string.h>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 funcs.SendMsg = NaClDescCustomSendMsg; 89 funcs.SendMsg = NaClDescCustomSendMsg;
90 funcs.RecvMsg = NaClDescCustomRecvMsg; 90 funcs.RecvMsg = NaClDescCustomRecvMsg;
91 // NaClDescMakeCustomDesc gives us a reference on the returned NaClDesc. 91 // NaClDescMakeCustomDesc gives us a reference on the returned NaClDesc.
92 return NaClDescMakeCustomDesc(new DescThunker(adapter), &funcs); 92 return NaClDescMakeCustomDesc(new DescThunker(adapter), &funcs);
93 } 93 }
94 94
95 void DeleteChannel(IPC::Channel* channel) { 95 void DeleteChannel(IPC::Channel* channel) {
96 delete channel; 96 delete channel;
97 } 97 }
98 98
99 int TranslatePepperFileOpenFlags(int32_t pp_open_flags) { 99 // Translates Pepper's read/write open flags into NaCl's ones. The other open
100 // flags are discarded. If neither of the read/write flags is specified, just
101 // returns NACL_ABI_O_RDONLY as a safe fallback.
102 int TranslatePepperFileReadWriteOpenFlags(int32_t pp_open_flags) {
100 int nacl_open_flag; 103 int nacl_open_flag;
101 switch (pp_open_flags & (PP_FILEOPENFLAG_READ | PP_FILEOPENFLAG_WRITE)) { 104 if ((pp_open_flags & (PP_FILEOPENFLAG_READ | PP_FILEOPENFLAG_WRITE)) ==
102 case PP_FILEOPENFLAG_READ: 105 (PP_FILEOPENFLAG_READ | PP_FILEOPENFLAG_WRITE)) {
103 nacl_open_flag = NACL_ABI_O_RDONLY; 106 nacl_open_flag = NACL_ABI_O_RDWR;
104 break; 107 } else if (pp_open_flags & PP_FILEOPENFLAG_READ) {
105 case PP_FILEOPENFLAG_WRITE: 108 nacl_open_flag = NACL_ABI_O_RDONLY;
106 nacl_open_flag = NACL_ABI_O_WRONLY; 109 } else if (pp_open_flags & PP_FILEOPENFLAG_WRITE) {
107 break; 110 nacl_open_flag = NACL_ABI_O_WRONLY;
108 case PP_FILEOPENFLAG_READ | PP_FILEOPENFLAG_WRITE: 111 } else {
109 nacl_open_flag = NACL_ABI_O_RDWR; 112 DLOG(WARNING) << "PP_FILEOPENFLAG_READ and/or PP_FILEOPENFLAG_WRITE "
110 break; 113 << "should be specified.";
111 default: 114 // NACL_ABI_O_RDONLY == 0, so make this ambiguous case readonly as a safe
112 // NACL_ABI_O_RDONLY == 0, so make this ambiguous case readonly as a safe 115 // fallback.
113 // fallback. 116 nacl_open_flag = NACL_ABI_O_RDONLY;
114 nacl_open_flag = NACL_ABI_O_RDONLY;
115 break;
116 } 117 }
117
118 if (pp_open_flags & PP_FILEOPENFLAG_CREATE)
119 nacl_open_flag |= NACL_ABI_O_CREAT;
120 if (pp_open_flags & PP_FILEOPENFLAG_TRUNCATE)
121 nacl_open_flag |= NACL_ABI_O_TRUNC;
122 if (pp_open_flags & PP_FILEOPENFLAG_EXCLUSIVE)
123 nacl_open_flag |= NACL_ABI_O_EXCL;
124 return nacl_open_flag; 118 return nacl_open_flag;
125 } 119 }
126 120
127 class NaClDescWrapper { 121 class NaClDescWrapper {
128 public: 122 public:
129 explicit NaClDescWrapper(NaClDesc* desc): desc_(desc) {} 123 explicit NaClDescWrapper(NaClDesc* desc): desc_(desc) {}
130 ~NaClDescWrapper() { 124 ~NaClDescWrapper() {
131 NaClDescUnref(desc_); 125 NaClDescUnref(desc_);
132 } 126 }
133 127
(...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after
438 base::Passed(&response))); 432 base::Passed(&response)));
439 break; 433 break;
440 } 434 }
441 case ppapi::proxy::SerializedHandle::FILE: 435 case ppapi::proxy::SerializedHandle::FILE:
442 nacl_desc.reset(new NaClDescWrapper(NaClDescIoDescFromHandleAllocCtor( 436 nacl_desc.reset(new NaClDescWrapper(NaClDescIoDescFromHandleAllocCtor(
443 #if defined(OS_WIN) 437 #if defined(OS_WIN)
444 iter->descriptor(), 438 iter->descriptor(),
445 #else 439 #else
446 iter->descriptor().fd, 440 iter->descriptor().fd,
447 #endif 441 #endif
448 TranslatePepperFileOpenFlags(iter->open_flag())))); 442 TranslatePepperFileReadWriteOpenFlags(iter->open_flag()))));
449 break; 443 break;
450 case ppapi::proxy::SerializedHandle::INVALID: { 444 case ppapi::proxy::SerializedHandle::INVALID: {
451 // Nothing to do. TODO(dmichael): Should we log this? Or is it 445 // Nothing to do. TODO(dmichael): Should we log this? Or is it
452 // sometimes okay to pass an INVALID handle? 446 // sometimes okay to pass an INVALID handle?
453 break; 447 break;
454 } 448 }
455 // No default, so the compiler will warn us if new types get added. 449 // No default, so the compiler will warn us if new types get added.
456 } 450 }
457 if (nacl_desc.get()) 451 if (nacl_desc.get())
458 rewritten_msg->AddDescriptor(nacl_desc.release()); 452 rewritten_msg->AddDescriptor(nacl_desc.release());
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
577 571
578 header.payload_size = static_cast<uint32>(msg.payload_size()); 572 header.payload_size = static_cast<uint32>(msg.payload_size());
579 header.routing = msg.routing_id(); 573 header.routing = msg.routing_id();
580 header.type = msg.type(); 574 header.type = msg.type();
581 header.flags = msg.flags(); 575 header.flags = msg.flags();
582 header.num_fds = static_cast<int>(rewritten_msg->desc_count()); 576 header.num_fds = static_cast<int>(rewritten_msg->desc_count());
583 577
584 rewritten_msg->SetData(header, msg.payload(), msg.payload_size()); 578 rewritten_msg->SetData(header, msg.payload(), msg.payload_size());
585 locked_data_.to_be_received_.push(rewritten_msg); 579 locked_data_.to_be_received_.push(rewritten_msg);
586 } 580 }
581
582 int TranslatePepperFileReadWriteOpenFlagsForTesting(int32_t pp_open_flags) {
583 return TranslatePepperFileReadWriteOpenFlags(pp_open_flags);
584 }
OLDNEW
« no previous file with comments | « chrome/nacl/nacl_ipc_adapter.h ('k') | chrome/nacl/nacl_ipc_adapter_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698