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

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

Issue 10069051: RefCounted types should not have public destructors, chrome/nacl edition (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Implementation ordering Created 8 years, 8 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 | « no previous file | chrome/nacl/nacl_ipc_adapter.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 #ifndef CHROME_NACL_NACL_IPC_ADAPTER_H_ 5 #ifndef CHROME_NACL_NACL_IPC_ADAPTER_H_
6 #define CHROME_NACL_NACL_IPC_ADAPTER_H_ 6 #define CHROME_NACL_NACL_IPC_ADAPTER_H_
7 #pragma once 7 #pragma once
8 8
9 #include <queue> 9 #include <queue>
10 #include <string> 10 #include <string>
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 52
53 // Creates an adapter, using the thread associated with the given task 53 // Creates an adapter, using the thread associated with the given task
54 // runner for posting messages. In normal use, the task runner will post to 54 // runner for posting messages. In normal use, the task runner will post to
55 // the I/O thread of the process. 55 // the I/O thread of the process.
56 NaClIPCAdapter(const IPC::ChannelHandle& handle, base::TaskRunner* runner); 56 NaClIPCAdapter(const IPC::ChannelHandle& handle, base::TaskRunner* runner);
57 57
58 // Initializes with a given channel that's already created for testing 58 // Initializes with a given channel that's already created for testing
59 // purposes. This function will take ownership of the given channel. 59 // purposes. This function will take ownership of the given channel.
60 NaClIPCAdapter(scoped_ptr<IPC::Channel> channel, base::TaskRunner* runner); 60 NaClIPCAdapter(scoped_ptr<IPC::Channel> channel, base::TaskRunner* runner);
61 61
62 virtual ~NaClIPCAdapter();
63
64 // Implementation of sendmsg. Returns the number of bytes written or -1 on 62 // Implementation of sendmsg. Returns the number of bytes written or -1 on
65 // failure. 63 // failure.
66 int Send(const char* input_data, size_t input_data_len); 64 int Send(const char* input_data, size_t input_data_len);
67 65
68 // Implementation of recvmsg. Returns the number of bytes read or -1 on 66 // Implementation of recvmsg. Returns the number of bytes read or -1 on
69 // failure. This will block until there's an error or there is data to 67 // failure. This will block until there's an error or there is data to
70 // read. 68 // read.
71 int BlockingReceive(char* output_buffer, int output_buffer_size); 69 int BlockingReceive(char* output_buffer, int output_buffer_size);
72 70
73 // Closes the IPC channel. 71 // Closes the IPC channel.
74 void CloseChannel(); 72 void CloseChannel();
75 73
76 // Listener implementation. 74 // Listener implementation.
77 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 75 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
78 virtual void OnChannelConnected(int32 peer_pid) OVERRIDE; 76 virtual void OnChannelConnected(int32 peer_pid) OVERRIDE;
79 virtual void OnChannelError() OVERRIDE; 77 virtual void OnChannelError() OVERRIDE;
80 78
81 private: 79 private:
80 friend class base::RefCountedThreadSafe<NaClIPCAdapter>;
81
82 class RewrittenMessage; 82 class RewrittenMessage;
83 83
84 // This is the data that must only be accessed inside the lock. This struct 84 // This is the data that must only be accessed inside the lock. This struct
85 // just separates it so it's easier to see. 85 // just separates it so it's easier to see.
86 struct LockedData { 86 struct LockedData {
87 LockedData(); 87 LockedData();
88 ~LockedData(); 88 ~LockedData();
89 89
90 // Messages that we have read off of the Chrome IPC channel that are waiting 90 // Messages that we have read off of the Chrome IPC channel that are waiting
91 // to be received by the plugin. 91 // to be received by the plugin.
(...skipping 13 matching lines...) Expand all
105 105
106 // This is the data that must only be accessed on the I/O thread (as defined 106 // This is the data that must only be accessed on the I/O thread (as defined
107 // by TaskRunner). This struct just separates it so it's easier to see. 107 // by TaskRunner). This struct just separates it so it's easier to see.
108 struct IOThreadData { 108 struct IOThreadData {
109 IOThreadData(); 109 IOThreadData();
110 ~IOThreadData(); 110 ~IOThreadData();
111 111
112 scoped_ptr<IPC::Channel> channel_; 112 scoped_ptr<IPC::Channel> channel_;
113 }; 113 };
114 114
115 virtual ~NaClIPCAdapter();
116
115 // Reads up to the given amount of data. Returns 0 if nothing is waiting. 117 // Reads up to the given amount of data. Returns 0 if nothing is waiting.
116 int LockedReceive(char* output_buffer, int output_buffer_size); 118 int LockedReceive(char* output_buffer, int output_buffer_size);
117 119
118 // Sends a message that we know has been completed to the Chrome process. 120 // Sends a message that we know has been completed to the Chrome process.
119 bool SendCompleteMessage(const char* buffer, size_t buffer_len); 121 bool SendCompleteMessage(const char* buffer, size_t buffer_len);
120 122
121 // Clears the LockedData.to_be_sent_ structure in a way to make sure that 123 // Clears the LockedData.to_be_sent_ structure in a way to make sure that
122 // the memory is deleted. std::string can sometimes hold onto the buffer 124 // the memory is deleted. std::string can sometimes hold onto the buffer
123 // for future use which we don't want. 125 // for future use which we don't want.
124 void ClearToBeSent(); 126 void ClearToBeSent();
125 127
126 void CloseChannelOnIOThread(); 128 void CloseChannelOnIOThread();
127 void SendMessageOnIOThread(scoped_ptr<IPC::Message> message); 129 void SendMessageOnIOThread(scoped_ptr<IPC::Message> message);
128 130
129 base::Lock lock_; 131 base::Lock lock_;
130 base::ConditionVariable cond_var_; 132 base::ConditionVariable cond_var_;
131 133
132 scoped_refptr<base::TaskRunner> task_runner_; 134 scoped_refptr<base::TaskRunner> task_runner_;
133 135
134 // To be accessed inside of lock_ only. 136 // To be accessed inside of lock_ only.
135 LockedData locked_data_; 137 LockedData locked_data_;
136 138
137 // To be accessed on the I/O thread (via task runner) only. 139 // To be accessed on the I/O thread (via task runner) only.
138 IOThreadData io_thread_data_; 140 IOThreadData io_thread_data_;
139 141
140 DISALLOW_COPY_AND_ASSIGN(NaClIPCAdapter); 142 DISALLOW_COPY_AND_ASSIGN(NaClIPCAdapter);
141 }; 143 };
142 144
143 #endif // CHROME_NACL_NACL_IPC_ADAPTER_H_ 145 #endif // CHROME_NACL_NACL_IPC_ADAPTER_H_
OLDNEW
« no previous file with comments | « no previous file | chrome/nacl/nacl_ipc_adapter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698