// Copyright (c) 2008 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file.
class ChannelWin : public Channel, public MessageLoopForIO::IOHandler { public:
ChannelWin(mozilla::UniqueFileHandle pipe, Mode mode,
base::ProcessId other_pid);
bool Connect(Listener* listener) MOZ_EXCLUDES(SendMutex()) override; void Close() MOZ_EXCLUDES(SendMutex()) override; // NOTE: `Send` may be called on threads other than the I/O thread. bool Send(mozilla::UniquePtr<Message> message)
MOZ_EXCLUDES(SendMutex()) override;
// Called on a Message immediately before it is sent/recieved to transfer // handles to the remote process, or accept handles from the remote process. bool AcceptHandles(Message& msg) MOZ_REQUIRES(IOThread()); bool TransferHandles(Message& msg) MOZ_REQUIRES(SendMutex());
struct State {
explicit State(ChannelWin* channel);
~State();
MessageLoopForIO::IOContext context; // When there is pending I/O, this holds a strong reference to the // ChannelWin to prevent it from going away.
RefPtr<ChannelWin> is_pending;
};
State input_state_ MOZ_GUARDED_BY(IOThread());
State output_state_ MOZ_GUARDED_BY(SendMutex());
// Messages to be sent are queued here.
mozilla::Queue<mozilla::UniquePtr<Message>, 64> output_queue_
MOZ_GUARDED_BY(SendMutex());
// If sending a message blocks then we use this iterator to keep track of // where in the message we are. It gets reset when the message is finished // sending.
mozilla::Maybe<Pickle::BufferList::IterImpl> partial_write_iter_
MOZ_GUARDED_BY(SendMutex());
// We read from the pipe into this buffer
mozilla::UniquePtr<char[]> input_buf_ MOZ_GUARDED_BY(IOThread());
size_t input_buf_offset_ MOZ_GUARDED_BY(IOThread()) = 0;
// Large incoming messages that span multiple pipe buffers get built-up in the // buffers of this message.
mozilla::UniquePtr<Message> incoming_message_ MOZ_GUARDED_BY(IOThread());
// Will be set to `true` until `Connect()` has been called. bool waiting_connect_ MOZ_GUARDED_BY(chan_cap_) = true;
// This flag is set when processing incoming messages. It is used to // avoid recursing through ProcessIncomingMessages, which could cause // problems. TODO(darin): make this unnecessary bool processing_incoming_ MOZ_GUARDED_BY(IOThread()) = false;
// We keep track of the PID of the other side of this channel so that we can // record this when generating logs of IPC messages.
base::ProcessId other_pid_ MOZ_GUARDED_BY(chan_cap_) =
base::kInvalidProcessId;
// A privileged process handle used to transfer HANDLEs to and from the remote // process. This will only be used if `mode_ == MODE_BROKER_SERVER`.
HANDLE other_process_ MOZ_GUARDED_BY(chan_cap_) = INVALID_HANDLE_VALUE;
};
} // namespace IPC
#endif// CHROME_COMMON_IPC_CHANNEL_WIN_H_
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.1 Sekunden
(vorverarbeitet am 2026-08-26)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.