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

Side by Side Diff: third_party/WebKit/Source/modules/imagecapture/ImageCapture.cpp

Issue 2865563002: Image Capture: teach takePhoto() to accept an optional PhotoSettings dictionary (Closed)
Patch Set: reillyg@ comments: added param names Created 3 years, 7 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
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "modules/imagecapture/ImageCapture.h" 5 #include "modules/imagecapture/ImageCapture.h"
6 6
7 #include "bindings/core/v8/CallbackPromiseAdapter.h" 7 #include "bindings/core/v8/CallbackPromiseAdapter.h"
8 #include "bindings/core/v8/ScriptPromiseResolver.h" 8 #include "bindings/core/v8/ScriptPromiseResolver.h"
9 #include "core/dom/DOMException.h" 9 #include "core/dom/DOMException.h"
10 #include "core/dom/ExceptionCode.h" 10 #include "core/dom/ExceptionCode.h"
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 return promise; 129 return promise;
130 } 130 }
131 service_requests_.insert(resolver); 131 service_requests_.insert(resolver);
132 132
133 // m_streamTrack->component()->source()->id() is the renderer "name" of the 133 // m_streamTrack->component()->source()->id() is the renderer "name" of the
134 // camera; 134 // camera;
135 // TODO(mcasas) consider sending the security origin as well: 135 // TODO(mcasas) consider sending the security origin as well:
136 // scriptState->getExecutionContext()->getSecurityOrigin()->toString() 136 // scriptState->getExecutionContext()->getSecurityOrigin()->toString()
137 service_->GetCapabilities( 137 service_->GetCapabilities(
138 stream_track_->Component()->Source()->Id(), 138 stream_track_->Component()->Source()->Id(),
139 ConvertToBaseCallback(WTF::Bind(&ImageCapture::OnPhotoCapabilities, 139 ConvertToBaseCallback(WTF::Bind(
140 WrapPersistent(this), 140 &ImageCapture::OnMojoPhotoCapabilities, WrapPersistent(this),
141 WrapPersistent(resolver)))); 141 WrapPersistent(resolver), false /* trigger_take_photo */)));
142 return promise; 142 return promise;
143 } 143 }
144 144
145 ScriptPromise ImageCapture::setOptions(ScriptState* script_state, 145 ScriptPromise ImageCapture::setOptions(ScriptState* script_state,
146 const PhotoSettings& photo_settings) { 146 const PhotoSettings& photo_settings,
147 bool trigger_take_photo /* = false */) {
147 ScriptPromiseResolver* resolver = ScriptPromiseResolver::Create(script_state); 148 ScriptPromiseResolver* resolver = ScriptPromiseResolver::Create(script_state);
148 ScriptPromise promise = resolver->Promise(); 149 ScriptPromise promise = resolver->Promise();
149 150
150 if (TrackIsInactive(*stream_track_)) { 151 if (TrackIsInactive(*stream_track_)) {
151 resolver->Reject(DOMException::Create( 152 resolver->Reject(DOMException::Create(
152 kInvalidStateError, "The associated Track is in an invalid state.")); 153 kInvalidStateError, "The associated Track is in an invalid state."));
153 return promise; 154 return promise;
154 } 155 }
155 156
156 if (!service_) { 157 if (!service_) {
(...skipping 14 matching lines...) Expand all
171 172
172 settings->has_red_eye_reduction = photo_settings.hasRedEyeReduction(); 173 settings->has_red_eye_reduction = photo_settings.hasRedEyeReduction();
173 if (settings->has_red_eye_reduction) 174 if (settings->has_red_eye_reduction)
174 settings->red_eye_reduction = photo_settings.redEyeReduction(); 175 settings->red_eye_reduction = photo_settings.redEyeReduction();
175 settings->has_fill_light_mode = photo_settings.hasFillLightMode(); 176 settings->has_fill_light_mode = photo_settings.hasFillLightMode();
176 if (settings->has_fill_light_mode) { 177 if (settings->has_fill_light_mode) {
177 settings->fill_light_mode = 178 settings->fill_light_mode =
178 ParseFillLightMode(photo_settings.fillLightMode()); 179 ParseFillLightMode(photo_settings.fillLightMode());
179 } 180 }
180 181
181 service_->SetOptions(stream_track_->Component()->Source()->Id(), 182 service_->SetOptions(
182 std::move(settings), 183 stream_track_->Component()->Source()->Id(), std::move(settings),
183 ConvertToBaseCallback(WTF::Bind( 184 ConvertToBaseCallback(
184 &ImageCapture::OnSetOptions, WrapPersistent(this), 185 WTF::Bind(&ImageCapture::OnMojoSetOptions, WrapPersistent(this),
185 WrapPersistent(resolver)))); 186 WrapPersistent(resolver), trigger_take_photo)));
186 return promise; 187 return promise;
187 } 188 }
188 189
189 ScriptPromise ImageCapture::takePhoto(ScriptState* script_state) { 190 ScriptPromise ImageCapture::takePhoto(ScriptState* script_state) {
190 ScriptPromiseResolver* resolver = ScriptPromiseResolver::Create(script_state); 191 ScriptPromiseResolver* resolver = ScriptPromiseResolver::Create(script_state);
191 ScriptPromise promise = resolver->Promise(); 192 ScriptPromise promise = resolver->Promise();
192 193
193 if (TrackIsInactive(*stream_track_)) { 194 if (TrackIsInactive(*stream_track_)) {
194 resolver->Reject(DOMException::Create( 195 resolver->Reject(DOMException::Create(
195 kInvalidStateError, "The associated Track is in an invalid state.")); 196 kInvalidStateError, "The associated Track is in an invalid state."));
196 return promise; 197 return promise;
197 } 198 }
198 if (!service_) { 199 if (!service_) {
199 resolver->Reject(DOMException::Create(kNotFoundError, kNoServiceError)); 200 resolver->Reject(DOMException::Create(kNotFoundError, kNoServiceError));
200 return promise; 201 return promise;
201 } 202 }
202 203
203 service_requests_.insert(resolver); 204 service_requests_.insert(resolver);
204 205
205 // m_streamTrack->component()->source()->id() is the renderer "name" of the 206 // m_streamTrack->component()->source()->id() is the renderer "name" of the
206 // camera; 207 // camera;
207 // TODO(mcasas) consider sending the security origin as well: 208 // TODO(mcasas) consider sending the security origin as well:
208 // scriptState->getExecutionContext()->getSecurityOrigin()->toString() 209 // scriptState->getExecutionContext()->getSecurityOrigin()->toString()
209 service_->TakePhoto(stream_track_->Component()->Source()->Id(), 210 service_->TakePhoto(stream_track_->Component()->Source()->Id(),
210 ConvertToBaseCallback(WTF::Bind( 211 ConvertToBaseCallback(WTF::Bind(
211 &ImageCapture::OnTakePhoto, WrapPersistent(this), 212 &ImageCapture::OnMojoTakePhoto, WrapPersistent(this),
212 WrapPersistent(resolver)))); 213 WrapPersistent(resolver))));
213 return promise; 214 return promise;
214 } 215 }
215 216
217 ScriptPromise ImageCapture::takePhoto(ScriptState* script_state,
218 const PhotoSettings& photo_settings) {
219 return setOptions(script_state, photo_settings,
220 true /* trigger_take_photo */);
221 }
222
216 ScriptPromise ImageCapture::grabFrame(ScriptState* script_state) { 223 ScriptPromise ImageCapture::grabFrame(ScriptState* script_state) {
217 ScriptPromiseResolver* resolver = ScriptPromiseResolver::Create(script_state); 224 ScriptPromiseResolver* resolver = ScriptPromiseResolver::Create(script_state);
218 ScriptPromise promise = resolver->Promise(); 225 ScriptPromise promise = resolver->Promise();
219 226
220 if (TrackIsInactive(*stream_track_)) { 227 if (TrackIsInactive(*stream_track_)) {
221 resolver->Reject(DOMException::Create( 228 resolver->Reject(DOMException::Create(
222 kInvalidStateError, "The associated Track is in an invalid state.")); 229 kInvalidStateError, "The associated Track is in an invalid state."));
223 return promise; 230 return promise;
224 } 231 }
225 232
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 } 381 }
375 382
376 // TODO(mcasas): support ConstrainBooleanParameters where applicable. 383 // TODO(mcasas): support ConstrainBooleanParameters where applicable.
377 settings->has_torch = 384 settings->has_torch =
378 constraints.hasTorch() && constraints.torch().isBoolean(); 385 constraints.hasTorch() && constraints.torch().isBoolean();
379 if (settings->has_torch) { 386 if (settings->has_torch) {
380 current_constraints_.setTorch(constraints.torch()); 387 current_constraints_.setTorch(constraints.torch());
381 settings->torch = constraints.torch().getAsBoolean(); 388 settings->torch = constraints.torch().getAsBoolean();
382 } 389 }
383 390
384 service_->SetOptions(stream_track_->Component()->Source()->Id(), 391 service_->SetOptions(
385 std::move(settings), 392 stream_track_->Component()->Source()->Id(), std::move(settings),
386 ConvertToBaseCallback(WTF::Bind( 393 ConvertToBaseCallback(
387 &ImageCapture::OnSetOptions, WrapPersistent(this), 394 WTF::Bind(&ImageCapture::OnMojoSetOptions, WrapPersistent(this),
388 WrapPersistent(resolver)))); 395 WrapPersistent(resolver), false /* trigger_take_photo */)));
389 } 396 }
390 397
391 const MediaTrackConstraintSet& ImageCapture::GetMediaTrackConstraints() const { 398 const MediaTrackConstraintSet& ImageCapture::GetMediaTrackConstraints() const {
392 return current_constraints_; 399 return current_constraints_;
393 } 400 }
394 401
395 void ImageCapture::ClearMediaTrackConstraints(ScriptPromiseResolver* resolver) { 402 void ImageCapture::ClearMediaTrackConstraints(ScriptPromiseResolver* resolver) {
396 current_constraints_ = MediaTrackConstraintSet(); 403 current_constraints_ = MediaTrackConstraintSet();
397 resolver->Resolve(); 404 resolver->Resolve();
398 405
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
469 Platform::Current()->GetInterfaceProvider()->GetInterface( 476 Platform::Current()->GetInterfaceProvider()->GetInterface(
470 mojo::MakeRequest(&service_)); 477 mojo::MakeRequest(&service_));
471 478
472 service_.set_connection_error_handler(ConvertToBaseCallback(WTF::Bind( 479 service_.set_connection_error_handler(ConvertToBaseCallback(WTF::Bind(
473 &ImageCapture::OnServiceConnectionError, WrapWeakPersistent(this)))); 480 &ImageCapture::OnServiceConnectionError, WrapWeakPersistent(this))));
474 481
475 // Launch a retrieval of the current capabilities, which arrive asynchronously 482 // Launch a retrieval of the current capabilities, which arrive asynchronously
476 // to avoid blocking the main UI thread. 483 // to avoid blocking the main UI thread.
477 service_->GetCapabilities( 484 service_->GetCapabilities(
478 stream_track_->Component()->Source()->Id(), 485 stream_track_->Component()->Source()->Id(),
479 ConvertToBaseCallback(WTF::Bind(&ImageCapture::OnCapabilitiesUpdate, 486 ConvertToBaseCallback(WTF::Bind(
480 WrapPersistent(this)))); 487 &ImageCapture::UpdateMediaTrackCapabilities, WrapPersistent(this))));
481 } 488 }
482 489
483 void ImageCapture::OnPhotoCapabilities( 490 void ImageCapture::OnMojoPhotoCapabilities(
484 ScriptPromiseResolver* resolver, 491 ScriptPromiseResolver* resolver,
492 bool trigger_take_photo,
485 media::mojom::blink::PhotoCapabilitiesPtr capabilities) { 493 media::mojom::blink::PhotoCapabilitiesPtr capabilities) {
486 if (!service_requests_.Contains(resolver)) 494 if (!service_requests_.Contains(resolver))
487 return; 495 return;
496
488 if (capabilities.is_null()) { 497 if (capabilities.is_null()) {
489 resolver->Reject(DOMException::Create(kUnknownError, "platform error")); 498 resolver->Reject(DOMException::Create(kUnknownError, "platform error"));
490 } else { 499 service_requests_.erase(resolver);
491 // Update the local capabilities cache. 500 return;
492 OnCapabilitiesUpdateInternal(*capabilities); 501 }
493 502
494 PhotoCapabilities* caps = PhotoCapabilities::Create(); 503 PhotoCapabilities* caps = PhotoCapabilities::Create();
504 caps->SetRedEyeReduction(capabilities->red_eye_reduction);
505 // TODO(mcasas): Remove the explicit MediaSettingsRange::create() when
506 // mojo::StructTraits supports garbage-collected mappings,
507 // https://crbug.com/700180.
508 if (capabilities->height->min != 0 || capabilities->height->max != 0) {
509 caps->SetImageHeight(
510 MediaSettingsRange::Create(std::move(capabilities->height)));
511 }
512 if (capabilities->width->min != 0 || capabilities->width->max != 0) {
513 caps->SetImageWidth(
514 MediaSettingsRange::Create(std::move(capabilities->width)));
515 }
516 if (!capabilities->fill_light_mode.IsEmpty())
517 caps->SetFillLightMode(capabilities->fill_light_mode);
495 518
496 caps->SetRedEyeReduction(capabilities->red_eye_reduction); 519 // Update the local track capabilities cache.
497 // TODO(mcasas): Remove the explicit MediaSettingsRange::create() when 520 UpdateMediaTrackCapabilities(std::move(capabilities));
498 // mojo::StructTraits supports garbage-collected mappings,
499 // https://crbug.com/700180.
500 if (capabilities->height->min != 0 || capabilities->height->max != 0) {
501 caps->SetImageHeight(
502 MediaSettingsRange::Create(std::move(capabilities->height)));
503 }
504 if (capabilities->width->min != 0 || capabilities->width->max != 0) {
505 caps->SetImageWidth(
506 MediaSettingsRange::Create(std::move(capabilities->width)));
507 }
508 521
509 if (!capabilities->fill_light_mode.IsEmpty()) 522 if (trigger_take_photo) {
510 caps->SetFillLightMode(capabilities->fill_light_mode); 523 service_->TakePhoto(stream_track_->Component()->Source()->Id(),
524 ConvertToBaseCallback(WTF::Bind(
525 &ImageCapture::OnMojoTakePhoto,
526 WrapPersistent(this), WrapPersistent(resolver))));
527 return;
528 }
511 529
512 resolver->Resolve(caps); 530 resolver->Resolve(caps);
513 }
514 service_requests_.erase(resolver); 531 service_requests_.erase(resolver);
515 } 532 }
516 533
517 void ImageCapture::OnSetOptions(ScriptPromiseResolver* resolver, bool result) { 534 void ImageCapture::OnMojoSetOptions(ScriptPromiseResolver* resolver,
535 bool trigger_take_photo,
536 bool result) {
518 if (!service_requests_.Contains(resolver)) 537 if (!service_requests_.Contains(resolver))
519 return; 538 return;
520 539
521 if (!result) { 540 if (!result) {
522 resolver->Reject(DOMException::Create(kUnknownError, "setOptions failed")); 541 resolver->Reject(DOMException::Create(kUnknownError, "setOptions failed"));
523 service_requests_.erase(resolver); 542 service_requests_.erase(resolver);
524 return; 543 return;
525 } 544 }
526 545
527 // Retrieve the current device status after setting the options. 546 // Retrieve the current device status after setting the options.
528 service_->GetCapabilities( 547 service_->GetCapabilities(
529 stream_track_->Component()->Source()->Id(), 548 stream_track_->Component()->Source()->Id(),
530 ConvertToBaseCallback(WTF::Bind(&ImageCapture::OnPhotoCapabilities, 549 ConvertToBaseCallback(WTF::Bind(
531 WrapPersistent(this), 550 &ImageCapture::OnMojoPhotoCapabilities, WrapPersistent(this),
532 WrapPersistent(resolver)))); 551 WrapPersistent(resolver), trigger_take_photo)));
533 } 552 }
534 553
535 void ImageCapture::OnTakePhoto(ScriptPromiseResolver* resolver, 554 void ImageCapture::OnMojoTakePhoto(ScriptPromiseResolver* resolver,
536 media::mojom::blink::BlobPtr blob) { 555 media::mojom::blink::BlobPtr blob) {
537 if (!service_requests_.Contains(resolver)) 556 if (!service_requests_.Contains(resolver))
538 return; 557 return;
539 558
540 // TODO(mcasas): Should be using a mojo::StructTraits. 559 // TODO(mcasas): Should be using a mojo::StructTraits.
541 if (blob->data.IsEmpty()) 560 if (blob->data.IsEmpty()) {
542 resolver->Reject(DOMException::Create(kUnknownError, "platform error")); 561 resolver->Reject(DOMException::Create(kUnknownError, "platform error"));
543 else 562 } else {
544 resolver->Resolve( 563 resolver->Resolve(
545 Blob::Create(blob->data.data(), blob->data.size(), blob->mime_type)); 564 Blob::Create(blob->data.data(), blob->data.size(), blob->mime_type));
565 }
546 service_requests_.erase(resolver); 566 service_requests_.erase(resolver);
547 } 567 }
548 568
549 void ImageCapture::OnCapabilitiesUpdate( 569 void ImageCapture::UpdateMediaTrackCapabilities(
550 media::mojom::blink::PhotoCapabilitiesPtr capabilities) { 570 media::mojom::blink::PhotoCapabilitiesPtr capabilities) {
551 if (!capabilities.is_null()) 571 if (!capabilities)
552 OnCapabilitiesUpdateInternal(*capabilities); 572 return;
553 }
554 573
555 void ImageCapture::OnCapabilitiesUpdateInternal(
556 const media::mojom::blink::PhotoCapabilities& capabilities) {
557 WTF::Vector<WTF::String> supported_white_balance_modes; 574 WTF::Vector<WTF::String> supported_white_balance_modes;
558 supported_white_balance_modes.ReserveInitialCapacity( 575 supported_white_balance_modes.ReserveInitialCapacity(
559 capabilities.supported_white_balance_modes.size()); 576 capabilities->supported_white_balance_modes.size());
560 for (const auto& supported_mode : capabilities.supported_white_balance_modes) 577 for (const auto& supported_mode : capabilities->supported_white_balance_modes)
561 supported_white_balance_modes.push_back(ToString(supported_mode)); 578 supported_white_balance_modes.push_back(ToString(supported_mode));
562 if (!supported_white_balance_modes.IsEmpty()) { 579 if (!supported_white_balance_modes.IsEmpty()) {
563 capabilities_.setWhiteBalanceMode(std::move(supported_white_balance_modes)); 580 capabilities_.setWhiteBalanceMode(std::move(supported_white_balance_modes));
564 settings_.setWhiteBalanceMode( 581 settings_.setWhiteBalanceMode(
565 ToString(capabilities.current_white_balance_mode)); 582 ToString(capabilities->current_white_balance_mode));
566 } 583 }
567 584
568 WTF::Vector<WTF::String> supported_exposure_modes; 585 WTF::Vector<WTF::String> supported_exposure_modes;
569 supported_exposure_modes.ReserveInitialCapacity( 586 supported_exposure_modes.ReserveInitialCapacity(
570 capabilities.supported_exposure_modes.size()); 587 capabilities->supported_exposure_modes.size());
571 for (const auto& supported_mode : capabilities.supported_exposure_modes) 588 for (const auto& supported_mode : capabilities->supported_exposure_modes)
572 supported_exposure_modes.push_back(ToString(supported_mode)); 589 supported_exposure_modes.push_back(ToString(supported_mode));
573 if (!supported_exposure_modes.IsEmpty()) { 590 if (!supported_exposure_modes.IsEmpty()) {
574 capabilities_.setExposureMode(std::move(supported_exposure_modes)); 591 capabilities_.setExposureMode(std::move(supported_exposure_modes));
575 settings_.setExposureMode(ToString(capabilities.current_exposure_mode)); 592 settings_.setExposureMode(ToString(capabilities->current_exposure_mode));
576 } 593 }
577 594
578 WTF::Vector<WTF::String> supported_focus_modes; 595 WTF::Vector<WTF::String> supported_focus_modes;
579 supported_focus_modes.ReserveInitialCapacity( 596 supported_focus_modes.ReserveInitialCapacity(
580 capabilities.supported_focus_modes.size()); 597 capabilities->supported_focus_modes.size());
581 for (const auto& supported_mode : capabilities.supported_focus_modes) 598 for (const auto& supported_mode : capabilities->supported_focus_modes)
582 supported_focus_modes.push_back(ToString(supported_mode)); 599 supported_focus_modes.push_back(ToString(supported_mode));
583 if (!supported_focus_modes.IsEmpty()) { 600 if (!supported_focus_modes.IsEmpty()) {
584 capabilities_.setFocusMode(std::move(supported_focus_modes)); 601 capabilities_.setFocusMode(std::move(supported_focus_modes));
585 settings_.setFocusMode(ToString(capabilities.current_focus_mode)); 602 settings_.setFocusMode(ToString(capabilities->current_focus_mode));
586 } 603 }
587 604
588 HeapVector<Point2D> current_points_of_interest; 605 HeapVector<Point2D> current_points_of_interest;
589 if (!capabilities.points_of_interest.IsEmpty()) { 606 if (!capabilities->points_of_interest.IsEmpty()) {
590 for (const auto& point : capabilities.points_of_interest) { 607 for (const auto& point : capabilities->points_of_interest) {
591 Point2D web_point; 608 Point2D web_point;
592 web_point.setX(point->x); 609 web_point.setX(point->x);
593 web_point.setY(point->y); 610 web_point.setY(point->y);
594 current_points_of_interest.push_back(mojo::Clone(web_point)); 611 current_points_of_interest.push_back(mojo::Clone(web_point));
595 } 612 }
596 } 613 }
597 settings_.setPointsOfInterest(std::move(current_points_of_interest)); 614 settings_.setPointsOfInterest(std::move(current_points_of_interest));
598 615
599 // TODO(mcasas): Remove the explicit MediaSettingsRange::create() when 616 // TODO(mcasas): Remove the explicit MediaSettingsRange::create() when
600 // mojo::StructTraits supports garbage-collected mappings, 617 // mojo::StructTraits supports garbage-collected mappings,
601 // https://crbug.com/700180. 618 // https://crbug.com/700180.
602 if (capabilities.exposure_compensation->max != 619 if (capabilities->exposure_compensation->max !=
603 capabilities.exposure_compensation->min) { 620 capabilities->exposure_compensation->min) {
604 capabilities_.setExposureCompensation( 621 capabilities_.setExposureCompensation(
605 MediaSettingsRange::Create(*capabilities.exposure_compensation)); 622 MediaSettingsRange::Create(*capabilities->exposure_compensation));
606 settings_.setExposureCompensation( 623 settings_.setExposureCompensation(
607 capabilities.exposure_compensation->current); 624 capabilities->exposure_compensation->current);
608 } 625 }
609 if (capabilities.color_temperature->max != 626 if (capabilities->color_temperature->max !=
610 capabilities.color_temperature->min) { 627 capabilities->color_temperature->min) {
611 capabilities_.setColorTemperature( 628 capabilities_.setColorTemperature(
612 MediaSettingsRange::Create(*capabilities.color_temperature)); 629 MediaSettingsRange::Create(*capabilities->color_temperature));
613 settings_.setColorTemperature(capabilities.color_temperature->current); 630 settings_.setColorTemperature(capabilities->color_temperature->current);
614 } 631 }
615 if (capabilities.iso->max != capabilities.iso->min) { 632 if (capabilities->iso->max != capabilities->iso->min) {
616 capabilities_.setIso(MediaSettingsRange::Create(*capabilities.iso)); 633 capabilities_.setIso(MediaSettingsRange::Create(*capabilities->iso));
617 settings_.setIso(capabilities.iso->current); 634 settings_.setIso(capabilities->iso->current);
618 } 635 }
619 636
620 if (capabilities.brightness->max != capabilities.brightness->min) { 637 if (capabilities->brightness->max != capabilities->brightness->min) {
621 capabilities_.setBrightness( 638 capabilities_.setBrightness(
622 MediaSettingsRange::Create(*capabilities.brightness)); 639 MediaSettingsRange::Create(*capabilities->brightness));
623 settings_.setBrightness(capabilities.brightness->current); 640 settings_.setBrightness(capabilities->brightness->current);
624 } 641 }
625 if (capabilities.contrast->max != capabilities.contrast->min) { 642 if (capabilities->contrast->max != capabilities->contrast->min) {
626 capabilities_.setContrast( 643 capabilities_.setContrast(
627 MediaSettingsRange::Create(*capabilities.contrast)); 644 MediaSettingsRange::Create(*capabilities->contrast));
628 settings_.setContrast(capabilities.contrast->current); 645 settings_.setContrast(capabilities->contrast->current);
629 } 646 }
630 if (capabilities.saturation->max != capabilities.saturation->min) { 647 if (capabilities->saturation->max != capabilities->saturation->min) {
631 capabilities_.setSaturation( 648 capabilities_.setSaturation(
632 MediaSettingsRange::Create(*capabilities.saturation)); 649 MediaSettingsRange::Create(*capabilities->saturation));
633 settings_.setSaturation(capabilities.saturation->current); 650 settings_.setSaturation(capabilities->saturation->current);
634 } 651 }
635 if (capabilities.sharpness->max != capabilities.sharpness->min) { 652 if (capabilities->sharpness->max != capabilities->sharpness->min) {
636 capabilities_.setSharpness( 653 capabilities_.setSharpness(
637 MediaSettingsRange::Create(*capabilities.sharpness)); 654 MediaSettingsRange::Create(*capabilities->sharpness));
638 settings_.setSharpness(capabilities.sharpness->current); 655 settings_.setSharpness(capabilities->sharpness->current);
639 } 656 }
640 657
641 if (capabilities.zoom->max != capabilities.zoom->min) { 658 if (capabilities->zoom->max != capabilities->zoom->min) {
642 capabilities_.setZoom(MediaSettingsRange::Create(*capabilities.zoom)); 659 capabilities_.setZoom(MediaSettingsRange::Create(*capabilities->zoom));
643 settings_.setZoom(capabilities.zoom->current); 660 settings_.setZoom(capabilities->zoom->current);
644 } 661 }
645 662
646 if (capabilities.supports_torch) 663 if (capabilities->supports_torch)
647 capabilities_.setTorch(capabilities.supports_torch); 664 capabilities_.setTorch(capabilities->supports_torch);
648 if (capabilities.supports_torch) 665 if (capabilities->supports_torch)
649 settings_.setTorch(capabilities.torch); 666 settings_.setTorch(capabilities->torch);
650 } 667 }
651 668
652 void ImageCapture::OnServiceConnectionError() { 669 void ImageCapture::OnServiceConnectionError() {
653 service_.reset(); 670 service_.reset();
654 for (ScriptPromiseResolver* resolver : service_requests_) 671 for (ScriptPromiseResolver* resolver : service_requests_)
655 resolver->Reject(DOMException::Create(kNotFoundError, kNoServiceError)); 672 resolver->Reject(DOMException::Create(kNotFoundError, kNoServiceError));
656 service_requests_.clear(); 673 service_requests_.clear();
657 } 674 }
658 675
659 DEFINE_TRACE(ImageCapture) { 676 DEFINE_TRACE(ImageCapture) {
660 visitor->Trace(stream_track_); 677 visitor->Trace(stream_track_);
661 visitor->Trace(capabilities_); 678 visitor->Trace(capabilities_);
662 visitor->Trace(settings_); 679 visitor->Trace(settings_);
663 visitor->Trace(current_constraints_); 680 visitor->Trace(current_constraints_);
664 visitor->Trace(service_requests_); 681 visitor->Trace(service_requests_);
665 EventTargetWithInlineData::Trace(visitor); 682 EventTargetWithInlineData::Trace(visitor);
666 ContextLifecycleObserver::Trace(visitor); 683 ContextLifecycleObserver::Trace(visitor);
667 } 684 }
668 685
669 } // namespace blink 686 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698