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

Side by Side Diff: cc/ipc/copy_output_request_struct_traits.cc

Issue 2700533002: CopyOutputRequest must have a working result_callback_ when received over mojo (Closed)
Patch Set: c Created 3 years, 10 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
« no previous file with comments | « cc/ipc/copy_output_request_struct_traits.h ('k') | cc/ipc/struct_traits_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 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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 "cc/ipc/copy_output_request_struct_traits.h" 5 #include "cc/ipc/copy_output_request_struct_traits.h"
6 6
7 #include "base/callback_helpers.h"
8 #include "mojo/public/cpp/bindings/strong_binding.h"
9
10 namespace {
11
12 // When we're sending a CopyOutputRequest, we keep the result_callback_ in a
13 // CopyOutputResultSenderImpl and send a CopyOutputResultSenderPtr to the other
14 // process. When SendResult is called, we run the stored result_callback_.
15 class CopyOutputResultSenderImpl : public cc::mojom::CopyOutputResultSender {
16 public:
17 CopyOutputResultSenderImpl(
18 cc::CopyOutputRequest::CopyOutputRequestCallback result_callback)
19 : result_callback_(result_callback) {
20 DCHECK(result_callback_);
21 }
22
23 ~CopyOutputResultSenderImpl() override {
24 if (result_callback_)
25 result_callback_.Run(cc::CopyOutputResult::CreateEmptyResult());
26 }
27
28 // mojom::TextureMailboxReleaser implementation:
29 void SendResult(std::unique_ptr<cc::CopyOutputResult> result) override {
30 if (!result_callback_)
31 return;
32 base::ResetAndReturn(&result_callback_).Run(std::move(result));
33 }
34
35 private:
36 cc::CopyOutputRequest::CopyOutputRequestCallback result_callback_;
37 };
38
39 void SendResult(cc::mojom::CopyOutputResultSenderPtr ptr,
40 std::unique_ptr<cc::CopyOutputResult> result) {
41 ptr->SendResult(std::move(result));
42 }
43
44 } // namespace
45
7 namespace mojo { 46 namespace mojo {
8 47
9 // static 48 // static
49 cc::mojom::CopyOutputResultSenderPtr
50 StructTraits<cc::mojom::CopyOutputRequestDataView,
51 std::unique_ptr<cc::CopyOutputRequest>>::
52 result_sender(const std::unique_ptr<cc::CopyOutputRequest>& request) {
53 cc::mojom::CopyOutputResultSenderPtr result_sender;
54 auto impl = base::MakeUnique<CopyOutputResultSenderImpl>(
55 std::move(request->result_callback_));
56 MakeStrongBinding(std::move(impl), MakeRequest(&result_sender));
57 return result_sender;
58 }
59
60 // static
10 bool StructTraits<cc::mojom::CopyOutputRequestDataView, 61 bool StructTraits<cc::mojom::CopyOutputRequestDataView,
11 std::unique_ptr<cc::CopyOutputRequest>>:: 62 std::unique_ptr<cc::CopyOutputRequest>>::
12 Read(cc::mojom::CopyOutputRequestDataView data, 63 Read(cc::mojom::CopyOutputRequestDataView data,
13 std::unique_ptr<cc::CopyOutputRequest>* out_p) { 64 std::unique_ptr<cc::CopyOutputRequest>* out_p) {
14 auto request = cc::CopyOutputRequest::CreateEmptyRequest(); 65 auto request = cc::CopyOutputRequest::CreateEmptyRequest();
15 66
16 request->force_bitmap_result_ = data.force_bitmap_result(); 67 request->force_bitmap_result_ = data.force_bitmap_result();
17 68
18 if (!data.ReadSource(&request->source_)) 69 if (!data.ReadSource(&request->source_))
19 return false; 70 return false;
20 71
21 if (!data.ReadArea(&request->area_)) 72 if (!data.ReadArea(&request->area_))
22 return false; 73 return false;
23 74
24 if (!data.ReadTextureMailbox(&request->texture_mailbox_)) 75 if (!data.ReadTextureMailbox(&request->texture_mailbox_))
25 return false; 76 return false;
26 77
78 auto result_sender =
79 data.TakeResultSender<cc::mojom::CopyOutputResultSenderPtr>();
80 request->result_callback_ =
81 base::Bind(SendResult, base::Passed(&result_sender));
82
27 *out_p = std::move(request); 83 *out_p = std::move(request);
28 84
29 return true; 85 return true;
30 } 86 }
31 87
32 } // namespace mojo 88 } // namespace mojo
OLDNEW
« no previous file with comments | « cc/ipc/copy_output_request_struct_traits.h ('k') | cc/ipc/struct_traits_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698