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

Side by Side Diff: extensions/browser/extension_function.cc

Issue 2348723002: [Extensions] Remove UIThreadExtensionFunction::DelegateForTests (Closed)
Patch Set: lazyboy's Created 4 years, 3 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 | « extensions/browser/extension_function.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "extensions/browser/extension_function.h" 5 #include "extensions/browser/extension_function.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/macros.h" 10 #include "base/macros.h"
(...skipping 431 matching lines...) Expand 10 before | Expand all | Expand 10 after
442 } 442 }
443 443
444 bool ExtensionFunction::HasOptionalArgument(size_t index) { 444 bool ExtensionFunction::HasOptionalArgument(size_t index) {
445 base::Value* value; 445 base::Value* value;
446 return args_->Get(index, &value) && !value->IsType(base::Value::TYPE_NULL); 446 return args_->Get(index, &value) && !value->IsType(base::Value::TYPE_NULL);
447 } 447 }
448 448
449 void ExtensionFunction::SendResponseImpl(bool success) { 449 void ExtensionFunction::SendResponseImpl(bool success) {
450 DCHECK(!response_callback_.is_null()); 450 DCHECK(!response_callback_.is_null());
451 451
452 ResponseType type = success ? SUCCEEDED : FAILED; 452 ResponseType response = success ? SUCCEEDED : FAILED;
453 if (bad_message_) { 453 if (bad_message_) {
454 type = BAD_MESSAGE; 454 response = BAD_MESSAGE;
455 LOG(ERROR) << "Bad extension message " << name_; 455 LOG(ERROR) << "Bad extension message " << name_;
456 } 456 }
457 response_type_ = base::MakeUnique<ResponseType>(response);
457 458
458 // If results were never set, we send an empty argument list. 459 // If results were never set, we send an empty argument list.
459 if (!results_) 460 if (!results_)
460 results_.reset(new base::ListValue()); 461 results_.reset(new base::ListValue());
461 462
462 response_callback_.Run(type, *results_, GetError(), histogram_value()); 463 response_callback_.Run(response, *results_, GetError(), histogram_value());
463 LogUma(success, timer_.Elapsed(), histogram_value_); 464 LogUma(success, timer_.Elapsed(), histogram_value_);
464 } 465 }
465 466
466 void ExtensionFunction::OnRespondingLater(ResponseValue value) { 467 void ExtensionFunction::OnRespondingLater(ResponseValue value) {
467 SendResponse(value->Apply()); 468 SendResponse(value->Apply());
468 } 469 }
469 470
470 UIThreadExtensionFunction::UIThreadExtensionFunction() 471 UIThreadExtensionFunction::UIThreadExtensionFunction()
471 : context_(nullptr), 472 : context_(nullptr),
472 render_frame_host_(nullptr), 473 render_frame_host_(nullptr),
473 is_from_service_worker_(false), 474 is_from_service_worker_(false) {}
474 delegate_(nullptr) {}
475 475
476 UIThreadExtensionFunction::~UIThreadExtensionFunction() { 476 UIThreadExtensionFunction::~UIThreadExtensionFunction() {
477 if (dispatcher() && render_frame_host()) 477 if (dispatcher() && render_frame_host())
478 dispatcher()->OnExtensionFunctionCompleted(extension()); 478 dispatcher()->OnExtensionFunctionCompleted(extension());
479 // The extension function should always respond to avoid leaks in the 479 // The extension function should always respond to avoid leaks in the
480 // renderer, dangling callbacks, etc. The exception is if the system is 480 // renderer, dangling callbacks, etc. The exception is if the system is
481 // shutting down. 481 // shutting down.
482 // TODO(devlin): Duplicate this check in IOThreadExtensionFunction. It's 482 // TODO(devlin): Duplicate this check in IOThreadExtensionFunction. It's
483 // tricky because checking IsShuttingDown has to be called from the UI thread. 483 // tricky because checking IsShuttingDown has to be called from the UI thread.
484 extensions::ExtensionsBrowserClient* browser_client = 484 extensions::ExtensionsBrowserClient* browser_client =
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
544 } 544 }
545 545
546 content::WebContents* UIThreadExtensionFunction::GetSenderWebContents() { 546 content::WebContents* UIThreadExtensionFunction::GetSenderWebContents() {
547 return render_frame_host_ ? 547 return render_frame_host_ ?
548 content::WebContents::FromRenderFrameHost(render_frame_host_) : nullptr; 548 content::WebContents::FromRenderFrameHost(render_frame_host_) : nullptr;
549 } 549 }
550 550
551 void UIThreadExtensionFunction::SendResponse(bool success) { 551 void UIThreadExtensionFunction::SendResponse(bool success) {
552 DCHECK(!did_respond_) << name_; 552 DCHECK(!did_respond_) << name_;
553 did_respond_ = true; 553 did_respond_ = true;
554 if (delegate_) 554 SendResponseImpl(success);
555 delegate_->OnSendResponse(this, success, bad_message_);
556 else
557 SendResponseImpl(success);
558 555
559 if (!transferred_blob_uuids_.empty()) { 556 if (!transferred_blob_uuids_.empty()) {
560 DCHECK(!delegate_) << "Blob transfer not supported with test delegate.";
561 render_frame_host_->Send( 557 render_frame_host_->Send(
562 new ExtensionMsg_TransferBlobs(transferred_blob_uuids_)); 558 new ExtensionMsg_TransferBlobs(transferred_blob_uuids_));
563 } 559 }
564 } 560 }
565 561
566 void UIThreadExtensionFunction::SetTransferredBlobUUIDs( 562 void UIThreadExtensionFunction::SetTransferredBlobUUIDs(
567 const std::vector<std::string>& blob_uuids) { 563 const std::vector<std::string>& blob_uuids) {
568 DCHECK(transferred_blob_uuids_.empty()); // Should only be called once. 564 DCHECK(transferred_blob_uuids_.empty()); // Should only be called once.
569 transferred_blob_uuids_ = blob_uuids; 565 transferred_blob_uuids_ = blob_uuids;
570 } 566 }
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
616 612
617 ExtensionFunction::ResponseAction AsyncExtensionFunction::Run() { 613 ExtensionFunction::ResponseAction AsyncExtensionFunction::Run() {
618 return RunAsync() ? RespondLater() : RespondNow(Error(error_)); 614 return RunAsync() ? RespondLater() : RespondNow(Error(error_));
619 } 615 }
620 616
621 // static 617 // static
622 bool AsyncExtensionFunction::ValidationFailure( 618 bool AsyncExtensionFunction::ValidationFailure(
623 AsyncExtensionFunction* function) { 619 AsyncExtensionFunction* function) {
624 return false; 620 return false;
625 } 621 }
OLDNEW
« no previous file with comments | « extensions/browser/extension_function.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698