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

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

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

Powered by Google App Engine
This is Rietveld 408576698