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

Side by Side Diff: content/child/web_data_consumer_handle_impl.cc

Issue 620303002: Implement WebDataConsumerHandle. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 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
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "content/child/web_data_consumer_handle_impl.h"
6
7 #include <numeric>
tyoshino (SeeGerritForStatus) 2014/10/23 07:22:43 limits?
yhirano 2014/10/23 08:35:39 Done.
8 #include "base/bind.h"
9 #include "base/logging.h"
tyoshino (SeeGerritForStatus) 2014/10/23 07:22:43 include src/mojo/public/c/system/types.h
yhirano 2014/10/23 08:35:39 Done.
10
11 namespace content {
12
13 typedef blink::WebDataConsumerHandle::Result Result;
14
15 WebDataConsumerHandleImpl::WebDataConsumerHandleImpl(Handle handle)
16 : handle_(handle.Pass()), client_(nullptr) {}
17
18 WebDataConsumerHandleImpl::~WebDataConsumerHandleImpl() {}
19
20 Result WebDataConsumerHandleImpl::read(
21 void* data, size_t size, Flags flags, size_t* read_size) {
22 // TODO(yhirano): We need this variable definition to avoid a link error.
tyoshino (SeeGerritForStatus) 2014/10/23 07:22:43 please write the action to take in addition to the
yhirano 2014/10/23 08:35:39 Done.
23 const Flags kNone = FlagNone;
24 DCHECK_EQ(flags, kNone);
25 DCHECK_LE(size, std::numeric_limits<uint32_t>::max());
26
27 uint32_t size_to_pass = size;
28 MojoReadDataFlags flags_to_pass = MOJO_READ_DATA_FLAG_NONE;
29 MojoResult rv =
30 mojo::ReadDataRaw(handle_.get(), data, &size_to_pass, flags_to_pass);
31 *read_size = rv == MOJO_RESULT_OK ? size_to_pass : 0;
32
33 return HandleReadResult(rv);
34 }
35
36 Result WebDataConsumerHandleImpl::beginRead(
37 const void** buffer, Flags flags, size_t* available) {
38 // TODO(yhirano): We need this variable definition to avoid a link error.
39 const Flags kNone = FlagNone;
40 DCHECK_EQ(flags, kNone);
41
42 *buffer = nullptr;
43
44 uint32_t size_to_pass = 0;
45 MojoReadDataFlags flags_to_pass = MOJO_READ_DATA_FLAG_NONE;
46
47 MojoResult rv = mojo::BeginReadDataRaw(handle_.get(), buffer,
48 &size_to_pass, flags_to_pass);
49 *available = rv == Ok ? size_to_pass : 0;
50 return HandleReadResult(rv);
51 }
52
53 Result WebDataConsumerHandleImpl::endRead(size_t read_size) {
54 MojoResult rv = mojo::EndReadDataRaw(handle_.get(), read_size);
55 return rv == MOJO_RESULT_OK ? Ok : UnexpectedError;
56 }
57
58 void WebDataConsumerHandleImpl::registerClient(Client* client) {
59 DCHECK(!client_);
60 DCHECK(client);
61 client_ = client;
62
63 handle_watcher_.Start(
64 handle_.get(),
65 MOJO_HANDLE_SIGNAL_READABLE,
66 MOJO_DEADLINE_INDEFINITE,
67 base::Bind(&WebDataConsumerHandleImpl::OnHandleGotReadable,
68 base::Unretained(this)));
69 }
70
71 void WebDataConsumerHandleImpl::unregisterClient() {
72 client_ = nullptr;
73 handle_watcher_.Stop();
74 }
75
76 Result WebDataConsumerHandleImpl::HandleReadResult(MojoResult mojo_result) {
77 if (mojo_result == MOJO_RESULT_SHOULD_WAIT && client_) {
78 handle_watcher_.Start(
79 handle_.get(),
80 MOJO_HANDLE_SIGNAL_READABLE,
81 MOJO_DEADLINE_INDEFINITE,
82 base::Bind(&WebDataConsumerHandleImpl::OnHandleGotReadable,
83 base::Unretained(this)));
tyoshino (SeeGerritForStatus) 2014/10/23 07:22:43 just put this in the corresponding case block in t
yhirano 2014/10/23 08:35:39 Done.
84 }
85
86 switch (mojo_result) {
87 case MOJO_RESULT_OK:
88 return Ok;
89 case MOJO_RESULT_FAILED_PRECONDITION:
90 return Done;
91 case MOJO_RESULT_BUSY:
92 return Busy;
93 case MOJO_RESULT_SHOULD_WAIT:
94 return ShouldWait;
95 case MOJO_RESULT_RESOURCE_EXHAUSTED:
96 return ResourceExhausted;
97 default:
98 return UnexpectedError;
99 }
100 }
101
102 void WebDataConsumerHandleImpl::OnHandleGotReadable(MojoResult) {
103 DCHECK(client_);
104 client_->didGetReadable();
105 }
106
107 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698