Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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 "ppapi/proxy/raw_var_data.h" | 5 #include "ppapi/proxy/raw_var_data.h" |
| 6 | 6 |
| 7 #include <stack> | 7 #include <stack> |
| 8 | 8 |
| 9 #include "base/containers/hash_tables.h" | 9 #include "base/containers/hash_tables.h" |
| 10 #include "base/stl_util.h" | 10 #include "base/stl_util.h" |
| (...skipping 647 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 658 if (!m->ReadString(iter, &key)) | 658 if (!m->ReadString(iter, &key)) |
| 659 return false; | 659 return false; |
| 660 if (!m->ReadUInt32(iter, &value)) | 660 if (!m->ReadUInt32(iter, &value)) |
| 661 return false; | 661 return false; |
| 662 children_.push_back(make_pair(key, value)); | 662 children_.push_back(make_pair(key, value)); |
| 663 } | 663 } |
| 664 return true; | 664 return true; |
| 665 } | 665 } |
| 666 | 666 |
| 667 // ResourceRawVarData ---------------------------------------------------------- | 667 // ResourceRawVarData ---------------------------------------------------------- |
| 668 ResourceRawVarData::ResourceRawVarData() { | 668 ResourceRawVarData::ResourceRawVarData() |
| 669 } | 669 : pp_resource_(0), |
| 670 pending_renderer_host_id_(0), | |
| 671 pending_browser_host_id_(0) {} | |
| 670 | 672 |
| 671 ResourceRawVarData::~ResourceRawVarData() { | 673 ResourceRawVarData::~ResourceRawVarData() { |
| 672 } | 674 } |
| 673 | 675 |
| 674 PP_VarType ResourceRawVarData::Type() { | 676 PP_VarType ResourceRawVarData::Type() { |
| 675 return PP_VARTYPE_RESOURCE; | 677 return PP_VARTYPE_RESOURCE; |
| 676 } | 678 } |
| 677 | 679 |
| 678 bool ResourceRawVarData::Init(const PP_Var& var, PP_Instance /*instance*/) { | 680 bool ResourceRawVarData::Init(const PP_Var& var, PP_Instance /*instance*/) { |
| 679 DCHECK(var.type == PP_VARTYPE_RESOURCE); | 681 DCHECK(var.type == PP_VARTYPE_RESOURCE); |
| 680 ResourceVar* resource_var = ResourceVar::FromPPVar(var); | 682 ResourceVar* resource_var = ResourceVar::FromPPVar(var); |
| 681 if (!resource_var) | 683 if (!resource_var) |
| 682 return false; | 684 return false; |
| 683 pp_resource_ = resource_var->GetPPResource(); | 685 pp_resource_ = resource_var->GetPPResource(); |
| 684 const IPC::Message* message = resource_var->GetCreationMessage(); | 686 const IPC::Message* message = resource_var->GetCreationMessage(); |
| 685 if (message) | 687 if (message) |
| 686 creation_message_.reset(new IPC::Message(*message)); | 688 creation_message_.reset(new IPC::Message(*message)); |
| 687 else | 689 else |
| 688 creation_message_.reset(); | 690 creation_message_.reset(); |
| 691 pending_renderer_host_id_ = resource_var->GetPendingRendererHostId(); | |
| 692 pending_browser_host_id_ = resource_var->GetPendingBrowserHostId(); | |
| 689 initialized_ = true; | 693 initialized_ = true; |
| 690 return true; | 694 return true; |
| 691 } | 695 } |
| 692 | 696 |
| 693 PP_Var ResourceRawVarData::CreatePPVar(PP_Instance instance) { | 697 PP_Var ResourceRawVarData::CreatePPVar(PP_Instance instance) { |
| 694 // If pp_resource_ is NULL, it could be because we are on the plugin side and | 698 // If pp_resource_ is NULL, it could be because we are on the plugin side and |
| 695 // there is a pending resource host on the renderer. | 699 // there is a pending resource host on the renderer. |
| 696 // TODO(mgiuca): Create a plugin-side resource in this case. | 700 // TODO(mgiuca): Create a plugin-side resource in this case. |
| 697 // Currently, this should never occur. This will be needed when passing a | 701 // Currently, this should never occur. This will be needed when passing a |
| 698 // resource from the renderer to the plugin (http://crbug.com/177017). | 702 // resource from the renderer to the plugin (http://crbug.com/177017). |
| 699 DCHECK(pp_resource_); | 703 DCHECK(pp_resource_); |
| 700 | 704 |
| 701 return PpapiGlobals::Get()->GetVarTracker()->MakeResourcePPVar(pp_resource_); | 705 return PpapiGlobals::Get()->GetVarTracker()->MakeResourcePPVar(pp_resource_); |
| 702 } | 706 } |
| 703 | 707 |
| 704 void ResourceRawVarData::PopulatePPVar(const PP_Var& var, | 708 void ResourceRawVarData::PopulatePPVar(const PP_Var& var, |
| 705 const std::vector<PP_Var>& graph) { | 709 const std::vector<PP_Var>& graph) { |
| 706 } | 710 } |
| 707 | 711 |
| 708 void ResourceRawVarData::Write(IPC::Message* m, | 712 void ResourceRawVarData::Write(IPC::Message* m, |
| 709 const HandleWriter& handle_writer) { | 713 const HandleWriter& handle_writer) { |
| 710 m->WriteInt(static_cast<int>(pp_resource_)); | 714 m->WriteInt(static_cast<int>(pp_resource_)); |
| 715 m->WriteInt(static_cast<int>(pending_renderer_host_id_)); | |
| 716 m->WriteInt(static_cast<int>(pending_browser_host_id_)); | |
|
dmichael (off chromium)
2013/09/25 21:25:15
These are already int, right? So no need to static
Matt Giuca
2013/09/25 23:57:00
Done. Good catch.
| |
| 711 m->WriteBool(creation_message_); | 717 m->WriteBool(creation_message_); |
| 712 if (creation_message_) | 718 if (creation_message_) |
| 713 IPC::ParamTraits<IPC::Message>::Write(m, *creation_message_); | 719 IPC::ParamTraits<IPC::Message>::Write(m, *creation_message_); |
| 714 } | 720 } |
| 715 | 721 |
| 716 bool ResourceRawVarData::Read(PP_VarType type, | 722 bool ResourceRawVarData::Read(PP_VarType type, |
| 717 const IPC::Message* m, | 723 const IPC::Message* m, |
| 718 PickleIterator* iter) { | 724 PickleIterator* iter) { |
| 719 int value; | 725 int value; |
| 720 if (!m->ReadInt(iter, &value)) | 726 if (!m->ReadInt(iter, &value)) |
| 721 return false; | 727 return false; |
| 722 pp_resource_ = static_cast<PP_Resource>(value); | 728 pp_resource_ = static_cast<PP_Resource>(value); |
| 729 if (!m->ReadInt(iter, &pending_renderer_host_id_)) | |
| 730 return false; | |
| 731 if (!m->ReadInt(iter, &pending_browser_host_id_)) | |
| 732 return false; | |
| 723 bool has_creation_message; | 733 bool has_creation_message; |
| 724 if (!m->ReadBool(iter, &has_creation_message)) | 734 if (!m->ReadBool(iter, &has_creation_message)) |
| 725 return false; | 735 return false; |
| 726 if (has_creation_message) { | 736 if (has_creation_message) { |
| 727 creation_message_.reset(new IPC::Message()); | 737 creation_message_.reset(new IPC::Message()); |
| 728 if (!IPC::ParamTraits<IPC::Message>::Read(m, iter, creation_message_.get())) | 738 if (!IPC::ParamTraits<IPC::Message>::Read(m, iter, creation_message_.get())) |
| 729 return false; | 739 return false; |
| 730 } else { | 740 } else { |
| 731 creation_message_.reset(); | 741 creation_message_.reset(); |
| 732 } | 742 } |
| 733 return true; | 743 return true; |
| 734 } | 744 } |
| 735 | 745 |
| 736 } // namespace proxy | 746 } // namespace proxy |
| 737 } // namespace ppapi | 747 } // namespace ppapi |
| OLD | NEW |