xref: /aosp_15_r20/external/cronet/base/fuchsia/test_interface_impl.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2018 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #include "base/fuchsia/test_interface_impl.h"
6*6777b538SAndroid Build Coastguard Worker 
7*6777b538SAndroid Build Coastguard Worker #include <utility>
8*6777b538SAndroid Build Coastguard Worker 
9*6777b538SAndroid Build Coastguard Worker #include "base/memory/weak_ptr.h"
10*6777b538SAndroid Build Coastguard Worker #include "base/run_loop.h"
11*6777b538SAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h"
12*6777b538SAndroid Build Coastguard Worker 
13*6777b538SAndroid Build Coastguard Worker namespace base {
14*6777b538SAndroid Build Coastguard Worker 
15*6777b538SAndroid Build Coastguard Worker TestInterfaceImpl::TestInterfaceImpl() = default;
16*6777b538SAndroid Build Coastguard Worker TestInterfaceImpl::~TestInterfaceImpl() = default;
17*6777b538SAndroid Build Coastguard Worker 
Add(int32_t a,int32_t b,AddCallback callback)18*6777b538SAndroid Build Coastguard Worker void TestInterfaceImpl::Add(int32_t a, int32_t b, AddCallback callback) {
19*6777b538SAndroid Build Coastguard Worker   callback(a + b);
20*6777b538SAndroid Build Coastguard Worker }
21*6777b538SAndroid Build Coastguard Worker 
VerifyTestInterface(fidl::InterfacePtr<testfidl::TestInterface> & ptr)22*6777b538SAndroid Build Coastguard Worker zx_status_t VerifyTestInterface(
23*6777b538SAndroid Build Coastguard Worker     fidl::InterfacePtr<testfidl::TestInterface>& ptr) {
24*6777b538SAndroid Build Coastguard Worker   // Call the service and wait for response.
25*6777b538SAndroid Build Coastguard Worker   RunLoop run_loop;
26*6777b538SAndroid Build Coastguard Worker   zx_status_t result = ZX_ERR_INTERNAL;
27*6777b538SAndroid Build Coastguard Worker   base::WeakPtrFactory<zx_status_t> weak_result(&result);
28*6777b538SAndroid Build Coastguard Worker 
29*6777b538SAndroid Build Coastguard Worker   ptr.set_error_handler(
30*6777b538SAndroid Build Coastguard Worker       [quit = run_loop.QuitClosure(),
31*6777b538SAndroid Build Coastguard Worker        weak_result = weak_result.GetWeakPtr()](zx_status_t status) {
32*6777b538SAndroid Build Coastguard Worker         if (weak_result)
33*6777b538SAndroid Build Coastguard Worker           *weak_result = status;
34*6777b538SAndroid Build Coastguard Worker         std::move(quit).Run();
35*6777b538SAndroid Build Coastguard Worker       });
36*6777b538SAndroid Build Coastguard Worker 
37*6777b538SAndroid Build Coastguard Worker   ptr->Add(2, 2,
38*6777b538SAndroid Build Coastguard Worker            [quit = run_loop.QuitClosure(),
39*6777b538SAndroid Build Coastguard Worker             weak_result = weak_result.GetWeakPtr()](int32_t value) {
40*6777b538SAndroid Build Coastguard Worker              EXPECT_EQ(value, 4);
41*6777b538SAndroid Build Coastguard Worker              if (weak_result)
42*6777b538SAndroid Build Coastguard Worker                *weak_result = ZX_OK;
43*6777b538SAndroid Build Coastguard Worker              std::move(quit).Run();
44*6777b538SAndroid Build Coastguard Worker            });
45*6777b538SAndroid Build Coastguard Worker 
46*6777b538SAndroid Build Coastguard Worker   run_loop.Run();
47*6777b538SAndroid Build Coastguard Worker 
48*6777b538SAndroid Build Coastguard Worker   // Reset error handler because the current one captures |run_loop| and
49*6777b538SAndroid Build Coastguard Worker   // |error| references which are about to be destroyed.
50*6777b538SAndroid Build Coastguard Worker   ptr.set_error_handler(nullptr);
51*6777b538SAndroid Build Coastguard Worker 
52*6777b538SAndroid Build Coastguard Worker   return result;
53*6777b538SAndroid Build Coastguard Worker }
54*6777b538SAndroid Build Coastguard Worker 
55*6777b538SAndroid Build Coastguard Worker }  // namespace base
56