// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
module mojo.test.sync_method_unittest.mojom;
enum PongSendMode {
// Pongs sent by a Ponger will use the PongAsync message only.
kAsync,
// Pongs sent by a Ponger will use the sync Pong message, and the
// corresponding Ping/PingNoInterrupt will not be sent until the Pong
// messages are sent and acknowledged. Must only be used in cases where we
// expect the Pong messages to be dispatchable even if the destination thread
// is waiting in a Ping/PingNoInterrupt.
kSyncBlockReply,
// Pongs sent by a Ponger will use the sync Pong message, but the reply to
// the corresponding Ping/PingNoInterrupt will be sent immediately after the
// Pong sends are initiated, without waiting. This is only used in cases where
// we don't intend for the Pong messages to be dispatchable during the
// corresponding Ping/PingNoInterrupt sync wait.
kSyncDoNotBlockReply,
};
interface Pinger {
[Sync] BindAssociated(pending_associated_receiver<Pinger> receiver) => ();
[Sync] SetPonger(PongSendMode send_mode,
pending_remote<Ponger> ponger) => ();
[Sync] SetSamePipePonger(
PongSendMode send_mode,
pending_associated_remote<Ponger> same_pipe_ponger) => ();
[Sync] Ping() => ();
[Sync, NoInterrupt] PingNoInterrupt() => ();
};
// An Pinger with no associated interface support.
interface SimplePinger {
[Sync] SimplePing() => ();
[Sync, NoInterrupt] SimplePingNoInterrupt() => ();
};
interface Ponger {
[Sync] Pong() => ();
PongAsync();
};
interface SyncService {
[Sync] SyncCall() => ();
};
interface NoSync {
Method() => ();
BindNoSync(pending_associated_receiver<NoSync> no_sync);
BindOneSync(pending_associated_receiver<OneSync> one_sync);
};
interface OneSync {
Method() => ();
[Sync]
SyncMethod() => ();
BindNoSync(pending_associated_receiver<NoSync> no_sync);
BindOneSync(pending_associated_receiver<OneSync> one_sync);
};