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

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

Issue 2871653003: Image Capture: teach takePhoto() to accept an optional PhotoSettings dictionary (2nd landing) (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(&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 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
375 } 382 }
376 383
377 // TODO(mcasas): support ConstrainBooleanParameters where applicable. 384 // TODO(mcasas): support ConstrainBooleanParameters where applicable.
378 settings->has_torch = 385 settings->has_torch =
379 constraints.hasTorch() && constraints.torch().isBoolean(); 386 constraints.hasTorch() && constraints.torch().isBoolean();
380 if (settings->has_torch) { 387 if (settings->has_torch) {
381 current_constraints_.setTorch(constraints.torch()); 388 current_constraints_.setTorch(constraints.torch());
382 settings->torch = constraints.torch().getAsBoolean(); 389 settings->torch = constraints.torch().getAsBoolean();
383 } 390 }
384 391
385 service_->SetOptions(stream_track_->Component()->Source()->Id(), 392 service_->SetOptions(
386 std::move(settings), 393 stream_track_->Component()->Source()->Id(), std::move(settings),
387 ConvertToBaseCallback(WTF::Bind( 394 ConvertToBaseCallback(
388 &ImageCapture::OnSetOptions, WrapPersistent(this), 395 WTF::Bind(&ImageCapture::OnMojoSetOptions, WrapPersistent(this),
389 WrapPersistent(resolver)))); 396 WrapPersistent(resolver), false /* trigger_take_photo */)));
390 } 397 }
391 398
392 const MediaTrackConstraintSet& ImageCapture::GetMediaTrackConstraints() const { 399 const MediaTrackConstraintSet& ImageCapture::GetMediaTrackConstraints() const {
393 return current_constraints_; 400 return current_constraints_;
394 } 401 }
395 402
396 void ImageCapture::ClearMediaTrackConstraints(ScriptPromiseResolver* resolver) { 403 void ImageCapture::ClearMediaTrackConstraints(ScriptPromiseResolver* resolver) {
397 current_constraints_ = MediaTrackConstraintSet(); 404 current_constraints_ = MediaTrackConstraintSet();
398 resolver->Resolve(); 405 resolver->Resolve();
399 406
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 Platform::Current()->GetInterfaceProvider()->GetInterface( 477 Platform::Current()->GetInterfaceProvider()->GetInterface(
471 mojo::MakeRequest(&service_)); 478 mojo::MakeRequest(&service_));
472 479
473 service_.set_connection_error_handler(ConvertToBaseCallback(WTF::Bind( 480 service_.set_connection_error_handler(ConvertToBaseCallback(WTF::Bind(
474 &ImageCapture::OnServiceConnectionError, WrapWeakPersistent(this)))); 481 &ImageCapture::OnServiceConnectionError, WrapWeakPersistent(this))));
475 482
476 // Launch a retrieval of the current capabilities, which arrive asynchronously 483 // Launch a retrieval of the current capabilities, which arrive asynchronously
477 // to avoid blocking the main UI thread. 484 // to avoid blocking the main UI thread.
478 service_->GetCapabilities( 485 service_->GetCapabilities(
479 stream_track_->Component()->Source()->Id(), 486 stream_track_->Component()->Source()->Id(),
480 ConvertToBaseCallback(WTF::Bind(&ImageCapture::OnCapabilitiesUpdate, 487 ConvertToBaseCallback(WTF::Bind(
481 WrapPersistent(this)))); 488 &ImageCapture::UpdateMediaTrackCapabilities, WrapPersistent(this))));
482 } 489 }
483 490
484 void ImageCapture::OnPhotoCapabilities( 491 void ImageCapture::OnMojoPhotoCapabilities(
485 ScriptPromiseResolver* resolver, 492 ScriptPromiseResolver* resolver,
493 bool trigger_take_photo,
486 media::mojom::blink::PhotoCapabilitiesPtr capabilities) { 494 media::mojom::blink::PhotoCapabilitiesPtr capabilities) {
487 if (!service_requests_.Contains(resolver)) 495 if (!service_requests_.Contains(resolver))
488 return; 496 return;
497
489 if (capabilities.is_null()) { 498 if (capabilities.is_null()) {
490 resolver->Reject(DOMException::Create(kUnknownError, "platform error")); 499 resolver->Reject(DOMException::Create(kUnknownError, "platform error"));
491 } else { 500 service_requests_.erase(resolver);
492 // Update the local capabilities cache. 501 return;
493 OnCapabilitiesUpdateInternal(*capabilities); 502 }
494 503
495 PhotoCapabilities* caps = PhotoCapabilities::Create(); 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);
496 519
497 caps->SetRedEyeReduction(capabilities->red_eye_reduction); 520 // Update the local track capabilities cache.
498 // TODO(mcasas): Remove the explicit MediaSettingsRange::create() when 521 UpdateMediaTrackCapabilities(std::move(capabilities));
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 522
510 if (!capabilities->fill_light_mode.IsEmpty()) 523 if (trigger_take_photo) {
511 caps->SetFillLightMode(capabilities->fill_light_mode); 524 service_->TakePhoto(stream_track_->Component()->Source()->Id(),
525 ConvertToBaseCallback(WTF::Bind(
526 &ImageCapture::OnMojoTakePhoto,
527 WrapPersistent(this), WrapPersistent(resolver))));
528 return;
529 }
512 530
513 resolver->Resolve(caps); 531 resolver->Resolve(caps);
514 }
515 service_requests_.erase(resolver); 532 service_requests_.erase(resolver);
516 } 533 }
517 534
518 void ImageCapture::OnSetOptions(ScriptPromiseResolver* resolver, bool result) { 535 void ImageCapture::OnMojoSetOptions(ScriptPromiseResolver* resolver,
536 bool trigger_take_photo,
537 bool result) {
519 if (!service_requests_.Contains(resolver)) 538 if (!service_requests_.Contains(resolver))
520 return; 539 return;
521 540
522 if (!result) { 541 if (!result) {
523 resolver->Reject(DOMException::Create(kUnknownError, "setOptions failed")); 542 resolver->Reject(DOMException::Create(kUnknownError, "setOptions failed"));
524 service_requests_.erase(resolver); 543 service_requests_.erase(resolver);
525 return; 544 return;
526 } 545 }
527 546
528 // Retrieve the current device status after setting the options. 547 // Retrieve the current device status after setting the options.
529 service_->GetCapabilities( 548 service_->GetCapabilities(
530 stream_track_->Component()->Source()->Id(), 549 stream_track_->Component()->Source()->Id(),
531 ConvertToBaseCallback(WTF::Bind(&ImageCapture::OnPhotoCapabilities, 550 ConvertToBaseCallback(WTF::Bind(
532 WrapPersistent(this), 551 &ImageCapture::OnMojoPhotoCapabilities, WrapPersistent(this),
533 WrapPersistent(resolver)))); 552 WrapPersistent(resolver), trigger_take_photo)));
534 } 553 }
535 554
536 void ImageCapture::OnTakePhoto(ScriptPromiseResolver* resolver, 555 void ImageCapture::OnMojoTakePhoto(ScriptPromiseResolver* resolver,
537 media::mojom::blink::BlobPtr blob) { 556 media::mojom::blink::BlobPtr blob) {
538 if (!service_requests_.Contains(resolver)) 557 if (!service_requests_.Contains(resolver))
539 return; 558 return;
540 559
541 // TODO(mcasas): Should be using a mojo::StructTraits. 560 // TODO(mcasas): Should be using a mojo::StructTraits.
542 if (blob->data.IsEmpty()) 561 if (blob->data.IsEmpty()) {
543 resolver->Reject(DOMException::Create(kUnknownError, "platform error")); 562 resolver->Reject(DOMException::Create(kUnknownError, "platform error"));
544 else 563 } else {
545 resolver->Resolve( 564 resolver->Resolve(
546 Blob::Create(blob->data.Data(), blob->data.size(), blob->mime_type)); 565 Blob::Create(blob->data.Data(), blob->data.size(), blob->mime_type));
566 }
547 service_requests_.erase(resolver); 567 service_requests_.erase(resolver);
548 } 568 }
549 569
550 void ImageCapture::OnCapabilitiesUpdate( 570 void ImageCapture::UpdateMediaTrackCapabilities(
551 media::mojom::blink::PhotoCapabilitiesPtr capabilities) { 571 media::mojom::blink::PhotoCapabilitiesPtr capabilities) {
552 if (!capabilities.is_null()) 572 if (!capabilities)
553 OnCapabilitiesUpdateInternal(*capabilities); 573 return;
554 }
555 574
556 void ImageCapture::OnCapabilitiesUpdateInternal(
557 const media::mojom::blink::PhotoCapabilities& capabilities) {
558 WTF::Vector<WTF::String> supported_white_balance_modes; 575 WTF::Vector<WTF::String> supported_white_balance_modes;
559 supported_white_balance_modes.ReserveInitialCapacity( 576 supported_white_balance_modes.ReserveInitialCapacity(
560 capabilities.supported_white_balance_modes.size()); 577 capabilities->supported_white_balance_modes.size());
561 for (const auto& supported_mode : capabilities.supported_white_balance_modes) 578 for (const auto& supported_mode : capabilities->supported_white_balance_modes)
562 supported_white_balance_modes.push_back(ToString(supported_mode)); 579 supported_white_balance_modes.push_back(ToString(supported_mode));
563 if (!supported_white_balance_modes.IsEmpty()) { 580 if (!supported_white_balance_modes.IsEmpty()) {
564 capabilities_.setWhiteBalanceMode(std::move(supported_white_balance_modes)); 581 capabilities_.setWhiteBalanceMode(std::move(supported_white_balance_modes));
565 settings_.setWhiteBalanceMode( 582 settings_.setWhiteBalanceMode(
566 ToString(capabilities.current_white_balance_mode)); 583 ToString(capabilities->current_white_balance_mode));
567 } 584 }
568 585
569 WTF::Vector<WTF::String> supported_exposure_modes; 586 WTF::Vector<WTF::String> supported_exposure_modes;
570 supported_exposure_modes.ReserveInitialCapacity( 587 supported_exposure_modes.ReserveInitialCapacity(
571 capabilities.supported_exposure_modes.size()); 588 capabilities->supported_exposure_modes.size());
572 for (const auto& supported_mode : capabilities.supported_exposure_modes) 589 for (const auto& supported_mode : capabilities->supported_exposure_modes)
573 supported_exposure_modes.push_back(ToString(supported_mode)); 590 supported_exposure_modes.push_back(ToString(supported_mode));
574 if (!supported_exposure_modes.IsEmpty()) { 591 if (!supported_exposure_modes.IsEmpty()) {
575 capabilities_.setExposureMode(std::move(supported_exposure_modes)); 592 capabilities_.setExposureMode(std::move(supported_exposure_modes));
576 settings_.setExposureMode(ToString(capabilities.current_exposure_mode)); 593 settings_.setExposureMode(ToString(capabilities->current_exposure_mode));
577 } 594 }
578 595
579 WTF::Vector<WTF::String> supported_focus_modes; 596 WTF::Vector<WTF::String> supported_focus_modes;
580 supported_focus_modes.ReserveInitialCapacity( 597 supported_focus_modes.ReserveInitialCapacity(
581 capabilities.supported_focus_modes.size()); 598 capabilities->supported_focus_modes.size());
582 for (const auto& supported_mode : capabilities.supported_focus_modes) 599 for (const auto& supported_mode : capabilities->supported_focus_modes)
583 supported_focus_modes.push_back(ToString(supported_mode)); 600 supported_focus_modes.push_back(ToString(supported_mode));
584 if (!supported_focus_modes.IsEmpty()) { 601 if (!supported_focus_modes.IsEmpty()) {
585 capabilities_.setFocusMode(std::move(supported_focus_modes)); 602 capabilities_.setFocusMode(std::move(supported_focus_modes));
586 settings_.setFocusMode(ToString(capabilities.current_focus_mode)); 603 settings_.setFocusMode(ToString(capabilities->current_focus_mode));
587 } 604 }
588 605
589 HeapVector<Point2D> current_points_of_interest; 606 HeapVector<Point2D> current_points_of_interest;
590 if (!capabilities.points_of_interest.IsEmpty()) { 607 if (!capabilities->points_of_interest.IsEmpty()) {
591 for (const auto& point : capabilities.points_of_interest) { 608 for (const auto& point : capabilities->points_of_interest) {
592 Point2D web_point; 609 Point2D web_point;
593 web_point.setX(point->x); 610 web_point.setX(point->x);
594 web_point.setY(point->y); 611 web_point.setY(point->y);
595 current_points_of_interest.push_back(mojo::Clone(web_point)); 612 current_points_of_interest.push_back(mojo::Clone(web_point));
596 } 613 }
597 } 614 }
598 settings_.setPointsOfInterest(std::move(current_points_of_interest)); 615 settings_.setPointsOfInterest(std::move(current_points_of_interest));
599 616
600 // TODO(mcasas): Remove the explicit MediaSettingsRange::create() when 617 // TODO(mcasas): Remove the explicit MediaSettingsRange::create() when
601 // mojo::StructTraits supports garbage-collected mappings, 618 // mojo::StructTraits supports garbage-collected mappings,
602 // https://crbug.com/700180. 619 // https://crbug.com/700180.
603 if (capabilities.exposure_compensation->max != 620 if (capabilities->exposure_compensation->max !=
604 capabilities.exposure_compensation->min) { 621 capabilities->exposure_compensation->min) {
605 capabilities_.setExposureCompensation( 622 capabilities_.setExposureCompensation(
606 MediaSettingsRange::Create(*capabilities.exposure_compensation)); 623 MediaSettingsRange::Create(*capabilities->exposure_compensation));
607 settings_.setExposureCompensation( 624 settings_.setExposureCompensation(
608 capabilities.exposure_compensation->current); 625 capabilities->exposure_compensation->current);
609 } 626 }
610 if (capabilities.color_temperature->max != 627 if (capabilities->color_temperature->max !=
611 capabilities.color_temperature->min) { 628 capabilities->color_temperature->min) {
612 capabilities_.setColorTemperature( 629 capabilities_.setColorTemperature(
613 MediaSettingsRange::Create(*capabilities.color_temperature)); 630 MediaSettingsRange::Create(*capabilities->color_temperature));
614 settings_.setColorTemperature(capabilities.color_temperature->current); 631 settings_.setColorTemperature(capabilities->color_temperature->current);
615 } 632 }
616 if (capabilities.iso->max != capabilities.iso->min) { 633 if (capabilities->iso->max != capabilities->iso->min) {
617 capabilities_.setIso(MediaSettingsRange::Create(*capabilities.iso)); 634 capabilities_.setIso(MediaSettingsRange::Create(*capabilities->iso));
618 settings_.setIso(capabilities.iso->current); 635 settings_.setIso(capabilities->iso->current);
619 } 636 }
620 637
621 if (capabilities.brightness->max != capabilities.brightness->min) { 638 if (capabilities->brightness->max != capabilities->brightness->min) {
622 capabilities_.setBrightness( 639 capabilities_.setBrightness(
623 MediaSettingsRange::Create(*capabilities.brightness)); 640 MediaSettingsRange::Create(*capabilities->brightness));
624 settings_.setBrightness(capabilities.brightness->current); 641 settings_.setBrightness(capabilities->brightness->current);
625 } 642 }
626 if (capabilities.contrast->max != capabilities.contrast->min) { 643 if (capabilities->contrast->max != capabilities->contrast->min) {
627 capabilities_.setContrast( 644 capabilities_.setContrast(
628 MediaSettingsRange::Create(*capabilities.contrast)); 645 MediaSettingsRange::Create(*capabilities->contrast));
629 settings_.setContrast(capabilities.contrast->current); 646 settings_.setContrast(capabilities->contrast->current);
630 } 647 }
631 if (capabilities.saturation->max != capabilities.saturation->min) { 648 if (capabilities->saturation->max != capabilities->saturation->min) {
632 capabilities_.setSaturation( 649 capabilities_.setSaturation(
633 MediaSettingsRange::Create(*capabilities.saturation)); 650 MediaSettingsRange::Create(*capabilities->saturation));
634 settings_.setSaturation(capabilities.saturation->current); 651 settings_.setSaturation(capabilities->saturation->current);
635 } 652 }
636 if (capabilities.sharpness->max != capabilities.sharpness->min) { 653 if (capabilities->sharpness->max != capabilities->sharpness->min) {
637 capabilities_.setSharpness( 654 capabilities_.setSharpness(
638 MediaSettingsRange::Create(*capabilities.sharpness)); 655 MediaSettingsRange::Create(*capabilities->sharpness));
639 settings_.setSharpness(capabilities.sharpness->current); 656 settings_.setSharpness(capabilities->sharpness->current);
640 } 657 }
641 658
642 if (capabilities.zoom->max != capabilities.zoom->min) { 659 if (capabilities->zoom->max != capabilities->zoom->min) {
643 capabilities_.setZoom(MediaSettingsRange::Create(*capabilities.zoom)); 660 capabilities_.setZoom(MediaSettingsRange::Create(*capabilities->zoom));
644 settings_.setZoom(capabilities.zoom->current); 661 settings_.setZoom(capabilities->zoom->current);
645 } 662 }
646 663
647 if (capabilities.supports_torch) 664 if (capabilities->supports_torch)
648 capabilities_.setTorch(capabilities.supports_torch); 665 capabilities_.setTorch(capabilities->supports_torch);
649 if (capabilities.supports_torch) 666 if (capabilities->supports_torch)
650 settings_.setTorch(capabilities.torch); 667 settings_.setTorch(capabilities->torch);
651 } 668 }
652 669
653 void ImageCapture::OnServiceConnectionError() { 670 void ImageCapture::OnServiceConnectionError() {
654 service_.reset(); 671 service_.reset();
655 for (ScriptPromiseResolver* resolver : service_requests_) 672 for (ScriptPromiseResolver* resolver : service_requests_)
656 resolver->Reject(DOMException::Create(kNotFoundError, kNoServiceError)); 673 resolver->Reject(DOMException::Create(kNotFoundError, kNoServiceError));
657 service_requests_.Clear(); 674 service_requests_.Clear();
658 } 675 }
659 676
660 DEFINE_TRACE(ImageCapture) { 677 DEFINE_TRACE(ImageCapture) {
661 visitor->Trace(stream_track_); 678 visitor->Trace(stream_track_);
662 visitor->Trace(capabilities_); 679 visitor->Trace(capabilities_);
663 visitor->Trace(settings_); 680 visitor->Trace(settings_);
664 visitor->Trace(current_constraints_); 681 visitor->Trace(current_constraints_);
665 visitor->Trace(service_requests_); 682 visitor->Trace(service_requests_);
666 EventTargetWithInlineData::Trace(visitor); 683 EventTargetWithInlineData::Trace(visitor);
667 ContextLifecycleObserver::Trace(visitor); 684 ContextLifecycleObserver::Trace(visitor);
668 } 685 }
669 686
670 } // namespace blink 687 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698