js/ipc/JavaScriptShared.cpp
author Phil Ringnalda <philringnalda@gmail.com>
Sat, 29 Nov 2014 09:03:57 -0800
changeset 218105 df3fc7cb7e8087edcd25a3afcd9540dbd8cc76ff
parent 217298 56ebb99d774eef30488e7fcca268308ed15e0660
child 219197 8d0fdbf77f280d70d0e3356111bd59658cbef8ed
permissions -rw-r--r--
Merge b-i to m-c, a=merge
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
     1
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
     2
 * vim: set ts=4 sw=4 et tw=80:
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
     3
 *
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
     4
 * This Source Code Form is subject to the terms of the Mozilla Public
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
     5
 * License, v. 2.0. If a copy of the MPL was not distributed with this
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
     6
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
     7
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
     8
#include "JavaScriptShared.h"
156143
3f40322844ed2abf92f166dc8d648ee08bb86651 Bug 934442 - Defer finalization of object ID table until after minor GC r=terrence
Jon Coppeard <jcoppeard@mozilla.com>
parents: 155063
diff changeset
     9
#include "mozilla/dom/BindingUtils.h"
209089
bb3b6a3a021c88daef318ea94fcb0875b023ac3a Bug 1073597, part 3 - Lazify creation of the CPOW manager in CpowIdHolder. r=billm
Andrew McCreight <continuation@gmail.com>
parents: 208230
diff changeset
    10
#include "mozilla/dom/CPOWManagerGetter.h"
183652
a141144b6c99a87d255fe9e7753611ec3755d280 Bug 996785 - Fix CPOW wrapping and compartment ownership (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183651
diff changeset
    11
#include "mozilla/dom/TabChild.h"
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    12
#include "jsfriendapi.h"
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    13
#include "xpcprivate.h"
207253
4d94f2bf456a1a941851bd8ee0e50a52dffd61c1 Bug 1065811 - Track Xray waivers with CPOWs. r=billm
Bobby Holley <bobbyholley@gmail.com>
parents: 207252
diff changeset
    14
#include "WrapperFactory.h"
185526
Tom Schuster <evilpies@gmail.com>
parents: 183652
diff changeset
    15
#include "mozilla/Preferences.h"
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    16
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    17
using namespace js;
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    18
using namespace JS;
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    19
using namespace mozilla;
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    20
using namespace mozilla::jsipc;
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    21
183641
737d5beb60c4f59acd68bb233893b9188d55bf98 Bug 996785 - Rename CPOW object map (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 181043
diff changeset
    22
IdToObjectMap::IdToObjectMap()
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    23
  : table_(SystemAllocPolicy())
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    24
{
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    25
}
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    26
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    27
bool
183641
737d5beb60c4f59acd68bb233893b9188d55bf98 Bug 996785 - Rename CPOW object map (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 181043
diff changeset
    28
IdToObjectMap::init()
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    29
{
183647
05fa4a69cb9818df96d82c9fc37fdad57ed85f68 Bug 996785 - Move CPOW wrapper answering code (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183645
diff changeset
    30
    if (table_.initialized())
05fa4a69cb9818df96d82c9fc37fdad57ed85f68 Bug 996785 - Move CPOW wrapper answering code (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183645
diff changeset
    31
        return true;
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    32
    return table_.init(32);
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    33
}
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    34
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    35
void
183641
737d5beb60c4f59acd68bb233893b9188d55bf98 Bug 996785 - Rename CPOW object map (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 181043
diff changeset
    36
IdToObjectMap::trace(JSTracer *trc)
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    37
{
183641
737d5beb60c4f59acd68bb233893b9188d55bf98 Bug 996785 - Rename CPOW object map (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 181043
diff changeset
    38
    for (Table::Range r(table_.all()); !r.empty(); r.popFront()) {
158689
b96d513cd89f5aff1841c6a6c926481807864589 Bug 940033 - js::HashMapEntry::{key,value} fields should be private, with accessors, and the former should expose a const reference. r=jimb
Jeff Walden <jwalden@mit.edu>
parents: 156143
diff changeset
    39
        DebugOnly<JSObject *> prior = r.front().value().get();
199191
a817b58630c872cfef3c9f84f7b9bd707a8147a5 Bug 1052388 - Rename JS_CallHeapFooTracer() functions to JS_CallFooTracer() r=terrence r=smaug
Jon Coppeard <jcoppeard@mozilla.com>
parents: 193738
diff changeset
    40
        JS_CallObjectTracer(trc, &r.front().value(), "ipc-object");
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    41
    }
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    42
}
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    43
183651
9055e91c6154d4372c1fb498cbc51da20cca505b Bug 996785 - Bidirectional CPOWs (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183649
diff changeset
    44
void
203053
9df9289e2d8f2709c3365bd8181120ba9b9057fa Bug 650161 - Add moving GC callback and use it to fix up ipc CPOW tables r=terrence
Jon Coppeard <jcoppeard@mozilla.com>
parents: 200699
diff changeset
    45
IdToObjectMap::sweep()
183651
9055e91c6154d4372c1fb498cbc51da20cca505b Bug 996785 - Bidirectional CPOWs (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183649
diff changeset
    46
{
9055e91c6154d4372c1fb498cbc51da20cca505b Bug 996785 - Bidirectional CPOWs (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183649
diff changeset
    47
    for (Table::Enum e(table_); !e.empty(); e.popFront()) {
207020
d63a5fe3ace7d59e1aaad2a5d64bc511793349bc Bug 650161 - Unify the finalization and moving GC callbacks into a weak pointer update callback r=terrence r=bholley
Jon Coppeard <jcoppeard@mozilla.com>
parents: 205145
diff changeset
    48
        JS::Heap<JSObject *> *objp = &e.front().value();
d63a5fe3ace7d59e1aaad2a5d64bc511793349bc Bug 650161 - Unify the finalization and moving GC callbacks into a weak pointer update callback r=terrence r=bholley
Jon Coppeard <jcoppeard@mozilla.com>
parents: 205145
diff changeset
    49
        JS_UpdateWeakPointerAfterGC(objp);
d63a5fe3ace7d59e1aaad2a5d64bc511793349bc Bug 650161 - Unify the finalization and moving GC callbacks into a weak pointer update callback r=terrence r=bholley
Jon Coppeard <jcoppeard@mozilla.com>
parents: 205145
diff changeset
    50
        if (!*objp)
183651
9055e91c6154d4372c1fb498cbc51da20cca505b Bug 996785 - Bidirectional CPOWs (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183649
diff changeset
    51
            e.removeFront();
9055e91c6154d4372c1fb498cbc51da20cca505b Bug 996785 - Bidirectional CPOWs (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183649
diff changeset
    52
    }
9055e91c6154d4372c1fb498cbc51da20cca505b Bug 996785 - Bidirectional CPOWs (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183649
diff changeset
    53
}
9055e91c6154d4372c1fb498cbc51da20cca505b Bug 996785 - Bidirectional CPOWs (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183649
diff changeset
    54
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    55
JSObject *
183641
737d5beb60c4f59acd68bb233893b9188d55bf98 Bug 996785 - Rename CPOW object map (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 181043
diff changeset
    56
IdToObjectMap::find(ObjectId id)
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    57
{
183641
737d5beb60c4f59acd68bb233893b9188d55bf98 Bug 996785 - Rename CPOW object map (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 181043
diff changeset
    58
    Table::Ptr p = table_.lookup(id);
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    59
    if (!p)
147976
a84f156f316450e40c01d8eaa78f7e47c940dd01 Bug 784739 - Switch from NULL to nullptr in js/ductwork/, js/ipc/, and js/public/; r=ehsan
Birunthan Mohanathas <birunthan@mohanathas.com>
parents: 144190
diff changeset
    60
        return nullptr;
158689
b96d513cd89f5aff1841c6a6c926481807864589 Bug 940033 - js::HashMapEntry::{key,value} fields should be private, with accessors, and the former should expose a const reference. r=jimb
Jeff Walden <jwalden@mit.edu>
parents: 156143
diff changeset
    61
    return p->value();
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    62
}
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    63
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    64
bool
183641
737d5beb60c4f59acd68bb233893b9188d55bf98 Bug 996785 - Rename CPOW object map (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 181043
diff changeset
    65
IdToObjectMap::add(ObjectId id, JSObject *obj)
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    66
{
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    67
    return table_.put(id, obj);
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    68
}
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    69
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    70
void
183641
737d5beb60c4f59acd68bb233893b9188d55bf98 Bug 996785 - Rename CPOW object map (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 181043
diff changeset
    71
IdToObjectMap::remove(ObjectId id)
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    72
{
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    73
    table_.remove(id);
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    74
}
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    75
183641
737d5beb60c4f59acd68bb233893b9188d55bf98 Bug 996785 - Rename CPOW object map (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 181043
diff changeset
    76
ObjectToIdMap::ObjectToIdMap()
156143
3f40322844ed2abf92f166dc8d648ee08bb86651 Bug 934442 - Defer finalization of object ID table until after minor GC r=terrence
Jon Coppeard <jcoppeard@mozilla.com>
parents: 155063
diff changeset
    77
  : table_(nullptr)
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    78
{
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    79
}
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    80
183641
737d5beb60c4f59acd68bb233893b9188d55bf98 Bug 996785 - Rename CPOW object map (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 181043
diff changeset
    81
ObjectToIdMap::~ObjectToIdMap()
156143
3f40322844ed2abf92f166dc8d648ee08bb86651 Bug 934442 - Defer finalization of object ID table until after minor GC r=terrence
Jon Coppeard <jcoppeard@mozilla.com>
parents: 155063
diff changeset
    82
{
3f40322844ed2abf92f166dc8d648ee08bb86651 Bug 934442 - Defer finalization of object ID table until after minor GC r=terrence
Jon Coppeard <jcoppeard@mozilla.com>
parents: 155063
diff changeset
    83
    if (table_) {
183641
737d5beb60c4f59acd68bb233893b9188d55bf98 Bug 996785 - Rename CPOW object map (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 181043
diff changeset
    84
        dom::AddForDeferredFinalization<Table, nsAutoPtr>(table_);
156143
3f40322844ed2abf92f166dc8d648ee08bb86651 Bug 934442 - Defer finalization of object ID table until after minor GC r=terrence
Jon Coppeard <jcoppeard@mozilla.com>
parents: 155063
diff changeset
    85
        table_ = nullptr;
3f40322844ed2abf92f166dc8d648ee08bb86651 Bug 934442 - Defer finalization of object ID table until after minor GC r=terrence
Jon Coppeard <jcoppeard@mozilla.com>
parents: 155063
diff changeset
    86
    }
3f40322844ed2abf92f166dc8d648ee08bb86651 Bug 934442 - Defer finalization of object ID table until after minor GC r=terrence
Jon Coppeard <jcoppeard@mozilla.com>
parents: 155063
diff changeset
    87
}
3f40322844ed2abf92f166dc8d648ee08bb86651 Bug 934442 - Defer finalization of object ID table until after minor GC r=terrence
Jon Coppeard <jcoppeard@mozilla.com>
parents: 155063
diff changeset
    88
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    89
bool
183641
737d5beb60c4f59acd68bb233893b9188d55bf98 Bug 996785 - Rename CPOW object map (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 181043
diff changeset
    90
ObjectToIdMap::init()
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    91
{
183647
05fa4a69cb9818df96d82c9fc37fdad57ed85f68 Bug 996785 - Move CPOW wrapper answering code (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183645
diff changeset
    92
    if (table_)
05fa4a69cb9818df96d82c9fc37fdad57ed85f68 Bug 996785 - Move CPOW wrapper answering code (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183645
diff changeset
    93
        return true;
05fa4a69cb9818df96d82c9fc37fdad57ed85f68 Bug 996785 - Move CPOW wrapper answering code (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183645
diff changeset
    94
183641
737d5beb60c4f59acd68bb233893b9188d55bf98 Bug 996785 - Rename CPOW object map (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 181043
diff changeset
    95
    table_ = new Table(SystemAllocPolicy());
156143
3f40322844ed2abf92f166dc8d648ee08bb86651 Bug 934442 - Defer finalization of object ID table until after minor GC r=terrence
Jon Coppeard <jcoppeard@mozilla.com>
parents: 155063
diff changeset
    96
    return table_ && table_->init(32);
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    97
}
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    98
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
    99
void
207020
d63a5fe3ace7d59e1aaad2a5d64bc511793349bc Bug 650161 - Unify the finalization and moving GC callbacks into a weak pointer update callback r=terrence r=bholley
Jon Coppeard <jcoppeard@mozilla.com>
parents: 205145
diff changeset
   100
ObjectToIdMap::trace(JSTracer *trc)
d63a5fe3ace7d59e1aaad2a5d64bc511793349bc Bug 650161 - Unify the finalization and moving GC callbacks into a weak pointer update callback r=terrence r=bholley
Jon Coppeard <jcoppeard@mozilla.com>
parents: 205145
diff changeset
   101
{
d63a5fe3ace7d59e1aaad2a5d64bc511793349bc Bug 650161 - Unify the finalization and moving GC callbacks into a weak pointer update callback r=terrence r=bholley
Jon Coppeard <jcoppeard@mozilla.com>
parents: 205145
diff changeset
   102
    for (Table::Enum e(*table_); !e.empty(); e.popFront()) {
d63a5fe3ace7d59e1aaad2a5d64bc511793349bc Bug 650161 - Unify the finalization and moving GC callbacks into a weak pointer update callback r=terrence r=bholley
Jon Coppeard <jcoppeard@mozilla.com>
parents: 205145
diff changeset
   103
        JSObject *obj = e.front().key();
d63a5fe3ace7d59e1aaad2a5d64bc511793349bc Bug 650161 - Unify the finalization and moving GC callbacks into a weak pointer update callback r=terrence r=bholley
Jon Coppeard <jcoppeard@mozilla.com>
parents: 205145
diff changeset
   104
        JS_CallUnbarrieredObjectTracer(trc, &obj, "ipc-object");
d63a5fe3ace7d59e1aaad2a5d64bc511793349bc Bug 650161 - Unify the finalization and moving GC callbacks into a weak pointer update callback r=terrence r=bholley
Jon Coppeard <jcoppeard@mozilla.com>
parents: 205145
diff changeset
   105
        if (obj != e.front().key())
d63a5fe3ace7d59e1aaad2a5d64bc511793349bc Bug 650161 - Unify the finalization and moving GC callbacks into a weak pointer update callback r=terrence r=bholley
Jon Coppeard <jcoppeard@mozilla.com>
parents: 205145
diff changeset
   106
            e.rekeyFront(obj);
d63a5fe3ace7d59e1aaad2a5d64bc511793349bc Bug 650161 - Unify the finalization and moving GC callbacks into a weak pointer update callback r=terrence r=bholley
Jon Coppeard <jcoppeard@mozilla.com>
parents: 205145
diff changeset
   107
    }
d63a5fe3ace7d59e1aaad2a5d64bc511793349bc Bug 650161 - Unify the finalization and moving GC callbacks into a weak pointer update callback r=terrence r=bholley
Jon Coppeard <jcoppeard@mozilla.com>
parents: 205145
diff changeset
   108
}
d63a5fe3ace7d59e1aaad2a5d64bc511793349bc Bug 650161 - Unify the finalization and moving GC callbacks into a weak pointer update callback r=terrence r=bholley
Jon Coppeard <jcoppeard@mozilla.com>
parents: 205145
diff changeset
   109
d63a5fe3ace7d59e1aaad2a5d64bc511793349bc Bug 650161 - Unify the finalization and moving GC callbacks into a weak pointer update callback r=terrence r=bholley
Jon Coppeard <jcoppeard@mozilla.com>
parents: 205145
diff changeset
   110
void
203053
9df9289e2d8f2709c3365bd8181120ba9b9057fa Bug 650161 - Add moving GC callback and use it to fix up ipc CPOW tables r=terrence
Jon Coppeard <jcoppeard@mozilla.com>
parents: 200699
diff changeset
   111
ObjectToIdMap::sweep()
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   112
{
183651
9055e91c6154d4372c1fb498cbc51da20cca505b Bug 996785 - Bidirectional CPOWs (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183649
diff changeset
   113
    for (Table::Enum e(*table_); !e.empty(); e.popFront()) {
9055e91c6154d4372c1fb498cbc51da20cca505b Bug 996785 - Bidirectional CPOWs (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183649
diff changeset
   114
        JSObject *obj = e.front().key();
207020
d63a5fe3ace7d59e1aaad2a5d64bc511793349bc Bug 650161 - Unify the finalization and moving GC callbacks into a weak pointer update callback r=terrence r=bholley
Jon Coppeard <jcoppeard@mozilla.com>
parents: 205145
diff changeset
   115
        JS_UpdateWeakPointerAfterGCUnbarriered(&obj);
d63a5fe3ace7d59e1aaad2a5d64bc511793349bc Bug 650161 - Unify the finalization and moving GC callbacks into a weak pointer update callback r=terrence r=bholley
Jon Coppeard <jcoppeard@mozilla.com>
parents: 205145
diff changeset
   116
        if (!obj)
183651
9055e91c6154d4372c1fb498cbc51da20cca505b Bug 996785 - Bidirectional CPOWs (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183649
diff changeset
   117
            e.removeFront();
203053
9df9289e2d8f2709c3365bd8181120ba9b9057fa Bug 650161 - Add moving GC callback and use it to fix up ipc CPOW tables r=terrence
Jon Coppeard <jcoppeard@mozilla.com>
parents: 200699
diff changeset
   118
        else if (obj != e.front().key())
9df9289e2d8f2709c3365bd8181120ba9b9057fa Bug 650161 - Add moving GC callback and use it to fix up ipc CPOW tables r=terrence
Jon Coppeard <jcoppeard@mozilla.com>
parents: 200699
diff changeset
   119
            e.rekeyFront(obj);
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   120
    }
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   121
}
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   122
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   123
ObjectId
183641
737d5beb60c4f59acd68bb233893b9188d55bf98 Bug 996785 - Rename CPOW object map (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 181043
diff changeset
   124
ObjectToIdMap::find(JSObject *obj)
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   125
{
183641
737d5beb60c4f59acd68bb233893b9188d55bf98 Bug 996785 - Rename CPOW object map (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 181043
diff changeset
   126
    Table::Ptr p = table_->lookup(obj);
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   127
    if (!p)
207252
bc71142337a34496ae657fcade46e04c1214b71f Bug 1065811 - Clean up ObjectId handling with static type checking. r=billm
Bobby Holley <bobbyholley@gmail.com>
parents: 207020
diff changeset
   128
        return ObjectId::nullId();
158689
b96d513cd89f5aff1841c6a6c926481807864589 Bug 940033 - js::HashMapEntry::{key,value} fields should be private, with accessors, and the former should expose a const reference. r=jimb
Jeff Walden <jwalden@mit.edu>
parents: 156143
diff changeset
   129
    return p->value();
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   130
}
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   131
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   132
bool
183641
737d5beb60c4f59acd68bb233893b9188d55bf98 Bug 996785 - Rename CPOW object map (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 181043
diff changeset
   133
ObjectToIdMap::add(JSContext *cx, JSObject *obj, ObjectId id)
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   134
{
156143
3f40322844ed2abf92f166dc8d648ee08bb86651 Bug 934442 - Defer finalization of object ID table until after minor GC r=terrence
Jon Coppeard <jcoppeard@mozilla.com>
parents: 155063
diff changeset
   135
    if (!table_->put(obj, id))
140919
e96bc10145e95c41400eb2547bed53d97e2568d7 Bug 899970 - Post barrier heap pointers in js/ipc r=terrence
Jon Coppeard <jcoppeard@mozilla.com>
parents: 140353
diff changeset
   136
        return false;
156143
3f40322844ed2abf92f166dc8d648ee08bb86651 Bug 934442 - Defer finalization of object ID table until after minor GC r=terrence
Jon Coppeard <jcoppeard@mozilla.com>
parents: 155063
diff changeset
   137
    JS_StoreObjectPostBarrierCallback(cx, keyMarkCallback, obj, table_);
140919
e96bc10145e95c41400eb2547bed53d97e2568d7 Bug 899970 - Post barrier heap pointers in js/ipc r=terrence
Jon Coppeard <jcoppeard@mozilla.com>
parents: 140353
diff changeset
   138
    return true;
e96bc10145e95c41400eb2547bed53d97e2568d7 Bug 899970 - Post barrier heap pointers in js/ipc r=terrence
Jon Coppeard <jcoppeard@mozilla.com>
parents: 140353
diff changeset
   139
}
e96bc10145e95c41400eb2547bed53d97e2568d7 Bug 899970 - Post barrier heap pointers in js/ipc r=terrence
Jon Coppeard <jcoppeard@mozilla.com>
parents: 140353
diff changeset
   140
e96bc10145e95c41400eb2547bed53d97e2568d7 Bug 899970 - Post barrier heap pointers in js/ipc r=terrence
Jon Coppeard <jcoppeard@mozilla.com>
parents: 140353
diff changeset
   141
/*
e96bc10145e95c41400eb2547bed53d97e2568d7 Bug 899970 - Post barrier heap pointers in js/ipc r=terrence
Jon Coppeard <jcoppeard@mozilla.com>
parents: 140353
diff changeset
   142
 * This function is called during minor GCs for each key in the HashMap that has
e96bc10145e95c41400eb2547bed53d97e2568d7 Bug 899970 - Post barrier heap pointers in js/ipc r=terrence
Jon Coppeard <jcoppeard@mozilla.com>
parents: 140353
diff changeset
   143
 * been moved.
e96bc10145e95c41400eb2547bed53d97e2568d7 Bug 899970 - Post barrier heap pointers in js/ipc r=terrence
Jon Coppeard <jcoppeard@mozilla.com>
parents: 140353
diff changeset
   144
 */
e96bc10145e95c41400eb2547bed53d97e2568d7 Bug 899970 - Post barrier heap pointers in js/ipc r=terrence
Jon Coppeard <jcoppeard@mozilla.com>
parents: 140353
diff changeset
   145
/* static */ void
183641
737d5beb60c4f59acd68bb233893b9188d55bf98 Bug 996785 - Rename CPOW object map (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 181043
diff changeset
   146
ObjectToIdMap::keyMarkCallback(JSTracer *trc, JSObject *key, void *data)
737d5beb60c4f59acd68bb233893b9188d55bf98 Bug 996785 - Rename CPOW object map (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 181043
diff changeset
   147
{
737d5beb60c4f59acd68bb233893b9188d55bf98 Bug 996785 - Rename CPOW object map (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 181043
diff changeset
   148
    Table *table = static_cast<Table*>(data);
140919
e96bc10145e95c41400eb2547bed53d97e2568d7 Bug 899970 - Post barrier heap pointers in js/ipc r=terrence
Jon Coppeard <jcoppeard@mozilla.com>
parents: 140353
diff changeset
   149
    JSObject *prior = key;
199191
a817b58630c872cfef3c9f84f7b9bd707a8147a5 Bug 1052388 - Rename JS_CallHeapFooTracer() functions to JS_CallFooTracer() r=terrence r=smaug
Jon Coppeard <jcoppeard@mozilla.com>
parents: 193738
diff changeset
   150
    JS_CallUnbarrieredObjectTracer(trc, &key, "ObjectIdCache::table_ key");
156143
3f40322844ed2abf92f166dc8d648ee08bb86651 Bug 934442 - Defer finalization of object ID table until after minor GC r=terrence
Jon Coppeard <jcoppeard@mozilla.com>
parents: 155063
diff changeset
   151
    table->rekeyIfMoved(prior, key);
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   152
}
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   153
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   154
void
183641
737d5beb60c4f59acd68bb233893b9188d55bf98 Bug 996785 - Rename CPOW object map (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 181043
diff changeset
   155
ObjectToIdMap::remove(JSObject *obj)
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   156
{
156143
3f40322844ed2abf92f166dc8d648ee08bb86651 Bug 934442 - Defer finalization of object ID table until after minor GC r=terrence
Jon Coppeard <jcoppeard@mozilla.com>
parents: 155063
diff changeset
   157
    table_->remove(obj);
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   158
}
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   159
185526
Tom Schuster <evilpies@gmail.com>
parents: 183652
diff changeset
   160
bool JavaScriptShared::sLoggingInitialized;
Tom Schuster <evilpies@gmail.com>
parents: 183652
diff changeset
   161
bool JavaScriptShared::sLoggingEnabled;
Tom Schuster <evilpies@gmail.com>
parents: 183652
diff changeset
   162
bool JavaScriptShared::sStackLoggingEnabled;
Tom Schuster <evilpies@gmail.com>
parents: 183652
diff changeset
   163
183651
9055e91c6154d4372c1fb498cbc51da20cca505b Bug 996785 - Bidirectional CPOWs (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183649
diff changeset
   164
JavaScriptShared::JavaScriptShared(JSRuntime *rt)
9055e91c6154d4372c1fb498cbc51da20cca505b Bug 996785 - Bidirectional CPOWs (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183649
diff changeset
   165
  : rt_(rt),
9055e91c6154d4372c1fb498cbc51da20cca505b Bug 996785 - Bidirectional CPOWs (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183649
diff changeset
   166
    refcount_(1),
207252
bc71142337a34496ae657fcade46e04c1214b71f Bug 1065811 - Clean up ObjectId handling with static type checking. r=billm
Bobby Holley <bobbyholley@gmail.com>
parents: 207020
diff changeset
   167
    nextSerialNumber_(1)
183651
9055e91c6154d4372c1fb498cbc51da20cca505b Bug 996785 - Bidirectional CPOWs (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183649
diff changeset
   168
{
185526
Tom Schuster <evilpies@gmail.com>
parents: 183652
diff changeset
   169
    if (!sLoggingInitialized) {
Tom Schuster <evilpies@gmail.com>
parents: 183652
diff changeset
   170
        sLoggingInitialized = true;
200699
4f9e0c8de078c89b591191aa8f134652c46c976f Bug 1051127 - Add an env var for CPOW logging (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 200693
diff changeset
   171
4f9e0c8de078c89b591191aa8f134652c46c976f Bug 1051127 - Add an env var for CPOW logging (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 200693
diff changeset
   172
        if (PR_GetEnv("MOZ_CPOW_LOG")) {
4f9e0c8de078c89b591191aa8f134652c46c976f Bug 1051127 - Add an env var for CPOW logging (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 200693
diff changeset
   173
            sLoggingEnabled = true;
4f9e0c8de078c89b591191aa8f134652c46c976f Bug 1051127 - Add an env var for CPOW logging (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 200693
diff changeset
   174
            sStackLoggingEnabled = true;
4f9e0c8de078c89b591191aa8f134652c46c976f Bug 1051127 - Add an env var for CPOW logging (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 200693
diff changeset
   175
        } else {
4f9e0c8de078c89b591191aa8f134652c46c976f Bug 1051127 - Add an env var for CPOW logging (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 200693
diff changeset
   176
            Preferences::AddBoolVarCache(&sLoggingEnabled,
4f9e0c8de078c89b591191aa8f134652c46c976f Bug 1051127 - Add an env var for CPOW logging (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 200693
diff changeset
   177
                                         "dom.ipc.cpows.log.enabled", false);
4f9e0c8de078c89b591191aa8f134652c46c976f Bug 1051127 - Add an env var for CPOW logging (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 200693
diff changeset
   178
            Preferences::AddBoolVarCache(&sStackLoggingEnabled,
4f9e0c8de078c89b591191aa8f134652c46c976f Bug 1051127 - Add an env var for CPOW logging (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 200693
diff changeset
   179
                                         "dom.ipc.cpows.log.stack", false);
4f9e0c8de078c89b591191aa8f134652c46c976f Bug 1051127 - Add an env var for CPOW logging (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 200693
diff changeset
   180
        }
185526
Tom Schuster <evilpies@gmail.com>
parents: 183652
diff changeset
   181
    }
183651
9055e91c6154d4372c1fb498cbc51da20cca505b Bug 996785 - Bidirectional CPOWs (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183649
diff changeset
   182
}
9055e91c6154d4372c1fb498cbc51da20cca505b Bug 996785 - Bidirectional CPOWs (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183649
diff changeset
   183
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   184
bool
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   185
JavaScriptShared::init()
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   186
{
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   187
    if (!objects_.init())
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   188
        return false;
183645
85e6824afa65a9ab3b1eb7afc705143a7d104f0a Bug 996785 - Use separate maps for local and remote CPOW objects (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183644
diff changeset
   189
    if (!cpows_.init())
85e6824afa65a9ab3b1eb7afc705143a7d104f0a Bug 996785 - Use separate maps for local and remote CPOW objects (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183644
diff changeset
   190
        return false;
207253
4d94f2bf456a1a941851bd8ee0e50a52dffd61c1 Bug 1065811 - Track Xray waivers with CPOWs. r=billm
Bobby Holley <bobbyholley@gmail.com>
parents: 207252
diff changeset
   191
    if (!unwaivedObjectIds_.init())
4d94f2bf456a1a941851bd8ee0e50a52dffd61c1 Bug 1065811 - Track Xray waivers with CPOWs. r=billm
Bobby Holley <bobbyholley@gmail.com>
parents: 207252
diff changeset
   192
        return false;
4d94f2bf456a1a941851bd8ee0e50a52dffd61c1 Bug 1065811 - Track Xray waivers with CPOWs. r=billm
Bobby Holley <bobbyholley@gmail.com>
parents: 207252
diff changeset
   193
    if (!waivedObjectIds_.init())
183651
9055e91c6154d4372c1fb498cbc51da20cca505b Bug 996785 - Bidirectional CPOWs (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183649
diff changeset
   194
        return false;
9055e91c6154d4372c1fb498cbc51da20cca505b Bug 996785 - Bidirectional CPOWs (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183649
diff changeset
   195
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   196
    return true;
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   197
}
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   198
183651
9055e91c6154d4372c1fb498cbc51da20cca505b Bug 996785 - Bidirectional CPOWs (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183649
diff changeset
   199
void
9055e91c6154d4372c1fb498cbc51da20cca505b Bug 996785 - Bidirectional CPOWs (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183649
diff changeset
   200
JavaScriptShared::decref()
9055e91c6154d4372c1fb498cbc51da20cca505b Bug 996785 - Bidirectional CPOWs (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183649
diff changeset
   201
{
9055e91c6154d4372c1fb498cbc51da20cca505b Bug 996785 - Bidirectional CPOWs (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183649
diff changeset
   202
    refcount_--;
9055e91c6154d4372c1fb498cbc51da20cca505b Bug 996785 - Bidirectional CPOWs (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183649
diff changeset
   203
    if (!refcount_)
9055e91c6154d4372c1fb498cbc51da20cca505b Bug 996785 - Bidirectional CPOWs (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183649
diff changeset
   204
        delete this;
9055e91c6154d4372c1fb498cbc51da20cca505b Bug 996785 - Bidirectional CPOWs (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183649
diff changeset
   205
}
9055e91c6154d4372c1fb498cbc51da20cca505b Bug 996785 - Bidirectional CPOWs (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183649
diff changeset
   206
9055e91c6154d4372c1fb498cbc51da20cca505b Bug 996785 - Bidirectional CPOWs (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183649
diff changeset
   207
void
9055e91c6154d4372c1fb498cbc51da20cca505b Bug 996785 - Bidirectional CPOWs (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183649
diff changeset
   208
JavaScriptShared::incref()
9055e91c6154d4372c1fb498cbc51da20cca505b Bug 996785 - Bidirectional CPOWs (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183649
diff changeset
   209
{
9055e91c6154d4372c1fb498cbc51da20cca505b Bug 996785 - Bidirectional CPOWs (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183649
diff changeset
   210
    refcount_++;
9055e91c6154d4372c1fb498cbc51da20cca505b Bug 996785 - Bidirectional CPOWs (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183649
diff changeset
   211
}
9055e91c6154d4372c1fb498cbc51da20cca505b Bug 996785 - Bidirectional CPOWs (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183649
diff changeset
   212
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   213
bool
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   214
JavaScriptShared::convertIdToGeckoString(JSContext *cx, JS::HandleId id, nsString *to)
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   215
{
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   216
    RootedValue idval(cx);
164103
21cef8b355cea6e7785ef61567e1ea4f752f305b Bug 959787 - Handlify several JSAPI interfaces that can GC, Part 4; r=sfink,r=bz
Terrence Cole <terrence@mozilla.com>
parents: 163837
diff changeset
   217
    if (!JS_IdToValue(cx, id, &idval))
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   218
        return false;
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   219
155063
cf9ea7edd6e210f0925816712e821d26b90ec72c Bug 933834 - Rename and handlify JS_ValueToString. r=terrence,bz
Tom Schuster <evilpies@gmail.com>
parents: 155037
diff changeset
   220
    RootedString str(cx, ToString(cx, idval));
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   221
    if (!str)
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   222
        return false;
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   223
193738
06fc258b16f8196a1fbb6c83f8af92d4a316eb1f Bug 1034689 part 3 - Fix remaining places in Gecko to handle Latin1 strings. r=bz
Jan de Mooij <jdemooij@mozilla.com>
parents: 192477
diff changeset
   224
    return AssignJSString(cx, *to, str);
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   225
}
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   226
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   227
bool
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   228
JavaScriptShared::convertGeckoStringToId(JSContext *cx, const nsString &from, JS::MutableHandleId to)
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   229
{
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   230
    RootedString str(cx, JS_NewUCStringCopyN(cx, from.BeginReading(), from.Length()));
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   231
    if (!str)
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   232
        return false;
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   233
176721
695622cd84e1494f5e4bfa64e181b0aa404c599d Bug 959787 - Handlify remaining JS APIs r=sfink r=bholley r=smaug
Jon Coppeard <jcoppeard@mozilla.com>
parents: 169933
diff changeset
   234
    return JS_StringToId(cx, str, to);
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   235
}
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   236
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   237
bool
150565
f6b879837822bac2c4f5988a0d5d04b88625d657 Bug 925534 - Convert toVariant to use handles, r=terrence
Steve Fink <sfink@mozilla.com>
parents: 148425
diff changeset
   238
JavaScriptShared::toVariant(JSContext *cx, JS::HandleValue from, JSVariant *to)
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   239
{
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   240
    switch (JS_TypeOfValue(cx, from)) {
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   241
      case JSTYPE_VOID:
183648
1e495c6dba19835297494eb2a128301fe9e55848 Bug 996785 - Use more descriptive IPDL types for CPOW value variants (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183647
diff changeset
   242
        *to = UndefinedVariant();
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   243
        return true;
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   244
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   245
      case JSTYPE_OBJECT:
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   246
      case JSTYPE_FUNCTION:
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   247
      {
144190
c1298dc3fa4ff2a44ec75eae0512fbae0756a95e Bug 908891 - Fix remaining exact rooting hazards in js/ipc; r=evilpie
Terrence Cole <terrence@mozilla.com>
parents: 141991
diff changeset
   248
        RootedObject obj(cx, from.toObjectOrNull());
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   249
        if (!obj) {
169630
28fa156efc31a3e832957b3643af9f59f7fcd3dd Bug 712873 - Part 2: Replace JS_ASSERT with MOZ_ASSERT outside js/src/ directory. r=luke
Chris Peterson <cpeterson@mozilla.com>
parents: 169468
diff changeset
   250
            MOZ_ASSERT(from == JSVAL_NULL);
183648
1e495c6dba19835297494eb2a128301fe9e55848 Bug 996785 - Use more descriptive IPDL types for CPOW value variants (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183647
diff changeset
   251
            *to = NullVariant();
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   252
            return true;
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   253
        }
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   254
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   255
        if (xpc_JSObjectIsID(cx, obj)) {
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   256
            JSIID iid;
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   257
            const nsID *id = xpc_JSObjectToID(cx, obj);
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   258
            ConvertID(*id, &iid);
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   259
            *to = iid;
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   260
            return true;
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   261
        }
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   262
183649
990ea6bcfa07a5ca68d6439f275a18c249f222c9 Bug 996785 - Distinguish local and remote CPOW objects in IPDL (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183648
diff changeset
   263
        ObjectVariant objVar;
990ea6bcfa07a5ca68d6439f275a18c249f222c9 Bug 996785 - Distinguish local and remote CPOW objects in IPDL (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183648
diff changeset
   264
        if (!toObjectVariant(cx, obj, &objVar))
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   265
            return false;
183649
990ea6bcfa07a5ca68d6439f275a18c249f222c9 Bug 996785 - Distinguish local and remote CPOW objects in IPDL (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183648
diff changeset
   266
        *to = objVar;
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   267
        return true;
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   268
      }
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   269
209134
2279791b5c6e8d55675db58f38ccfcba7c568ca9 Bug 1071177 - Add support for symbols as a value type. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209133
diff changeset
   270
      case JSTYPE_SYMBOL:
2279791b5c6e8d55675db58f38ccfcba7c568ca9 Bug 1071177 - Add support for symbols as a value type. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209133
diff changeset
   271
      {
2279791b5c6e8d55675db58f38ccfcba7c568ca9 Bug 1071177 - Add support for symbols as a value type. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209133
diff changeset
   272
        RootedSymbol sym(cx, from.toSymbol());
2279791b5c6e8d55675db58f38ccfcba7c568ca9 Bug 1071177 - Add support for symbols as a value type. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209133
diff changeset
   273
2279791b5c6e8d55675db58f38ccfcba7c568ca9 Bug 1071177 - Add support for symbols as a value type. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209133
diff changeset
   274
        SymbolVariant symVar;
2279791b5c6e8d55675db58f38ccfcba7c568ca9 Bug 1071177 - Add support for symbols as a value type. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209133
diff changeset
   275
        if (!toSymbolVariant(cx, sym, &symVar))
2279791b5c6e8d55675db58f38ccfcba7c568ca9 Bug 1071177 - Add support for symbols as a value type. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209133
diff changeset
   276
            return false;
2279791b5c6e8d55675db58f38ccfcba7c568ca9 Bug 1071177 - Add support for symbols as a value type. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209133
diff changeset
   277
        *to = symVar;
2279791b5c6e8d55675db58f38ccfcba7c568ca9 Bug 1071177 - Add support for symbols as a value type. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209133
diff changeset
   278
        return true;
2279791b5c6e8d55675db58f38ccfcba7c568ca9 Bug 1071177 - Add support for symbols as a value type. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209133
diff changeset
   279
      }
2279791b5c6e8d55675db58f38ccfcba7c568ca9 Bug 1071177 - Add support for symbols as a value type. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209133
diff changeset
   280
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   281
      case JSTYPE_STRING:
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   282
      {
192477
102fae9cacc1b3c48c9a8e640a9e183ea62fd9c5 Bug 1034191 - Make nsDependentJSString users work with Latin1 strings and nursery-allocated strings. r=bz
Jan de Mooij <jdemooij@mozilla.com>
parents: 185526
diff changeset
   283
        nsAutoJSString autoStr;
102fae9cacc1b3c48c9a8e640a9e183ea62fd9c5 Bug 1034191 - Make nsDependentJSString users work with Latin1 strings and nursery-allocated strings. r=bz
Jan de Mooij <jdemooij@mozilla.com>
parents: 185526
diff changeset
   284
        if (!autoStr.init(cx, from))
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   285
            return false;
192477
102fae9cacc1b3c48c9a8e640a9e183ea62fd9c5 Bug 1034191 - Make nsDependentJSString users work with Latin1 strings and nursery-allocated strings. r=bz
Jan de Mooij <jdemooij@mozilla.com>
parents: 185526
diff changeset
   286
        *to = autoStr;
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   287
        return true;
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   288
      }
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   289
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   290
      case JSTYPE_NUMBER:
180917
762a93154b1e38110d2c063315be84ff9a396d9d Bug 952650 (part 9) - Remove JSVAL_IS_INT. r=njn.
Rodrigo Rodriguez Jr. <rrodrigue96@hotmail.com>
parents: 176721
diff changeset
   291
        if (from.isInt32())
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   292
            *to = double(from.toInt32());
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   293
        else
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   294
            *to = from.toDouble();
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   295
        return true;
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   296
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   297
      case JSTYPE_BOOLEAN:
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   298
        *to = from.toBoolean();
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   299
        return true;
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   300
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   301
      default:
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   302
        MOZ_ASSERT(false);
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   303
        return false;
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   304
    }
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   305
}
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   306
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   307
bool
183643
9631faa6ed6754f5ab7b07ce40725e31482ec55f Bug 996785 - Rename CPOW toValue (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183641
diff changeset
   308
JavaScriptShared::fromVariant(JSContext *cx, const JSVariant &from, MutableHandleValue to)
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   309
{
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   310
    switch (from.type()) {
183648
1e495c6dba19835297494eb2a128301fe9e55848 Bug 996785 - Use more descriptive IPDL types for CPOW value variants (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183647
diff changeset
   311
        case JSVariant::TUndefinedVariant:
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   312
          to.set(UndefinedValue());
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   313
          return true;
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   314
183648
1e495c6dba19835297494eb2a128301fe9e55848 Bug 996785 - Use more descriptive IPDL types for CPOW value variants (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183647
diff changeset
   315
        case JSVariant::TNullVariant:
1e495c6dba19835297494eb2a128301fe9e55848 Bug 996785 - Use more descriptive IPDL types for CPOW value variants (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183647
diff changeset
   316
          to.set(NullValue());
1e495c6dba19835297494eb2a128301fe9e55848 Bug 996785 - Use more descriptive IPDL types for CPOW value variants (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183647
diff changeset
   317
          return true;
1e495c6dba19835297494eb2a128301fe9e55848 Bug 996785 - Use more descriptive IPDL types for CPOW value variants (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183647
diff changeset
   318
1e495c6dba19835297494eb2a128301fe9e55848 Bug 996785 - Use more descriptive IPDL types for CPOW value variants (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183647
diff changeset
   319
        case JSVariant::TObjectVariant:
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   320
        {
183649
990ea6bcfa07a5ca68d6439f275a18c249f222c9 Bug 996785 - Distinguish local and remote CPOW objects in IPDL (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183648
diff changeset
   321
          JSObject *obj = fromObjectVariant(cx, from.get_ObjectVariant());
183648
1e495c6dba19835297494eb2a128301fe9e55848 Bug 996785 - Use more descriptive IPDL types for CPOW value variants (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183647
diff changeset
   322
          if (!obj)
1e495c6dba19835297494eb2a128301fe9e55848 Bug 996785 - Use more descriptive IPDL types for CPOW value variants (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183647
diff changeset
   323
              return false;
1e495c6dba19835297494eb2a128301fe9e55848 Bug 996785 - Use more descriptive IPDL types for CPOW value variants (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183647
diff changeset
   324
          to.set(ObjectValue(*obj));
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   325
          return true;
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   326
        }
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   327
209134
2279791b5c6e8d55675db58f38ccfcba7c568ca9 Bug 1071177 - Add support for symbols as a value type. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209133
diff changeset
   328
        case JSVariant::TSymbolVariant:
2279791b5c6e8d55675db58f38ccfcba7c568ca9 Bug 1071177 - Add support for symbols as a value type. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209133
diff changeset
   329
        {
2279791b5c6e8d55675db58f38ccfcba7c568ca9 Bug 1071177 - Add support for symbols as a value type. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209133
diff changeset
   330
          Symbol *sym = fromSymbolVariant(cx, from.get_SymbolVariant());
2279791b5c6e8d55675db58f38ccfcba7c568ca9 Bug 1071177 - Add support for symbols as a value type. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209133
diff changeset
   331
          if (!sym)
2279791b5c6e8d55675db58f38ccfcba7c568ca9 Bug 1071177 - Add support for symbols as a value type. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209133
diff changeset
   332
              return false;
2279791b5c6e8d55675db58f38ccfcba7c568ca9 Bug 1071177 - Add support for symbols as a value type. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209133
diff changeset
   333
          to.setSymbol(sym);
2279791b5c6e8d55675db58f38ccfcba7c568ca9 Bug 1071177 - Add support for symbols as a value type. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209133
diff changeset
   334
          return true;
2279791b5c6e8d55675db58f38ccfcba7c568ca9 Bug 1071177 - Add support for symbols as a value type. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209133
diff changeset
   335
        }
2279791b5c6e8d55675db58f38ccfcba7c568ca9 Bug 1071177 - Add support for symbols as a value type. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209133
diff changeset
   336
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   337
        case JSVariant::Tdouble:
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   338
          to.set(JS_NumberValue(from.get_double()));
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   339
          return true;
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   340
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   341
        case JSVariant::Tbool:
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   342
          to.set(BOOLEAN_TO_JSVAL(from.get_bool()));
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   343
          return true;
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   344
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   345
        case JSVariant::TnsString:
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   346
        {
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   347
          const nsString &old = from.get_nsString();
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   348
          JSString *str = JS_NewUCStringCopyN(cx, old.BeginReading(), old.Length());
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   349
          if (!str)
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   350
              return false;
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   351
          to.set(StringValue(str));
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   352
          return true;
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   353
        }
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   354
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   355
        case JSVariant::TJSIID:
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   356
        {
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   357
          nsID iid;
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   358
          const JSIID &id = from.get_JSIID();
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   359
          ConvertID(id, &iid);
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   360
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   361
          JSCompartment *compartment = GetContextCompartment(cx);
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   362
          RootedObject global(cx, JS_GetGlobalForCompartmentOrNull(cx, compartment));
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   363
          JSObject *obj = xpc_NewIDObject(cx, global, iid);
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   364
          if (!obj)
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   365
              return false;
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   366
          to.set(ObjectValue(*obj));
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   367
          return true;
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   368
        }
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   369
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   370
        default:
209132
765ab5eaab5b12281c1cbad4c8a0828e37c92ba7 Bug 1071177 - Introduce JSIDVariant type for CPOWs. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209089
diff changeset
   371
          MOZ_CRASH("NYI");
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   372
          return false;
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   373
    }
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   374
}
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   375
209132
765ab5eaab5b12281c1cbad4c8a0828e37c92ba7 Bug 1071177 - Introduce JSIDVariant type for CPOWs. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209089
diff changeset
   376
bool
765ab5eaab5b12281c1cbad4c8a0828e37c92ba7 Bug 1071177 - Introduce JSIDVariant type for CPOWs. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209089
diff changeset
   377
JavaScriptShared::toJSIDVariant(JSContext *cx, HandleId from, JSIDVariant *to)
765ab5eaab5b12281c1cbad4c8a0828e37c92ba7 Bug 1071177 - Introduce JSIDVariant type for CPOWs. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209089
diff changeset
   378
{
765ab5eaab5b12281c1cbad4c8a0828e37c92ba7 Bug 1071177 - Introduce JSIDVariant type for CPOWs. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209089
diff changeset
   379
    if (JSID_IS_STRING(from)) {
765ab5eaab5b12281c1cbad4c8a0828e37c92ba7 Bug 1071177 - Introduce JSIDVariant type for CPOWs. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209089
diff changeset
   380
        nsAutoJSString autoStr;
765ab5eaab5b12281c1cbad4c8a0828e37c92ba7 Bug 1071177 - Introduce JSIDVariant type for CPOWs. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209089
diff changeset
   381
        if (!autoStr.init(cx, JSID_TO_STRING(from)))
765ab5eaab5b12281c1cbad4c8a0828e37c92ba7 Bug 1071177 - Introduce JSIDVariant type for CPOWs. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209089
diff changeset
   382
            return false;
765ab5eaab5b12281c1cbad4c8a0828e37c92ba7 Bug 1071177 - Introduce JSIDVariant type for CPOWs. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209089
diff changeset
   383
        *to = autoStr;
765ab5eaab5b12281c1cbad4c8a0828e37c92ba7 Bug 1071177 - Introduce JSIDVariant type for CPOWs. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209089
diff changeset
   384
        return true;
765ab5eaab5b12281c1cbad4c8a0828e37c92ba7 Bug 1071177 - Introduce JSIDVariant type for CPOWs. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209089
diff changeset
   385
    }
765ab5eaab5b12281c1cbad4c8a0828e37c92ba7 Bug 1071177 - Introduce JSIDVariant type for CPOWs. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209089
diff changeset
   386
    if (JSID_IS_INT(from)) {
765ab5eaab5b12281c1cbad4c8a0828e37c92ba7 Bug 1071177 - Introduce JSIDVariant type for CPOWs. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209089
diff changeset
   387
        *to = JSID_TO_INT(from);
765ab5eaab5b12281c1cbad4c8a0828e37c92ba7 Bug 1071177 - Introduce JSIDVariant type for CPOWs. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209089
diff changeset
   388
        return true;
765ab5eaab5b12281c1cbad4c8a0828e37c92ba7 Bug 1071177 - Introduce JSIDVariant type for CPOWs. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209089
diff changeset
   389
    }
209133
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   390
    if (JSID_IS_SYMBOL(from)) {
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   391
        SymbolVariant symVar;
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   392
        if (!toSymbolVariant(cx, JSID_TO_SYMBOL(from), &symVar))
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   393
            return false;
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   394
        *to = symVar;
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   395
        return true;
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   396
    }
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   397
    MOZ_ASSERT(false);
209132
765ab5eaab5b12281c1cbad4c8a0828e37c92ba7 Bug 1071177 - Introduce JSIDVariant type for CPOWs. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209089
diff changeset
   398
    return false;
765ab5eaab5b12281c1cbad4c8a0828e37c92ba7 Bug 1071177 - Introduce JSIDVariant type for CPOWs. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209089
diff changeset
   399
}
765ab5eaab5b12281c1cbad4c8a0828e37c92ba7 Bug 1071177 - Introduce JSIDVariant type for CPOWs. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209089
diff changeset
   400
765ab5eaab5b12281c1cbad4c8a0828e37c92ba7 Bug 1071177 - Introduce JSIDVariant type for CPOWs. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209089
diff changeset
   401
bool
765ab5eaab5b12281c1cbad4c8a0828e37c92ba7 Bug 1071177 - Introduce JSIDVariant type for CPOWs. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209089
diff changeset
   402
JavaScriptShared::fromJSIDVariant(JSContext *cx, const JSIDVariant &from, MutableHandleId to)
765ab5eaab5b12281c1cbad4c8a0828e37c92ba7 Bug 1071177 - Introduce JSIDVariant type for CPOWs. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209089
diff changeset
   403
{
765ab5eaab5b12281c1cbad4c8a0828e37c92ba7 Bug 1071177 - Introduce JSIDVariant type for CPOWs. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209089
diff changeset
   404
    switch (from.type()) {
209133
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   405
      case JSIDVariant::TSymbolVariant: {
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   406
        Symbol *sym = fromSymbolVariant(cx, from.get_SymbolVariant());
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   407
        if (!sym)
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   408
            return false;
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   409
        to.set(SYMBOL_TO_JSID(sym));
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   410
        return true;
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   411
      }
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   412
209132
765ab5eaab5b12281c1cbad4c8a0828e37c92ba7 Bug 1071177 - Introduce JSIDVariant type for CPOWs. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209089
diff changeset
   413
      case JSIDVariant::TnsString:
765ab5eaab5b12281c1cbad4c8a0828e37c92ba7 Bug 1071177 - Introduce JSIDVariant type for CPOWs. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209089
diff changeset
   414
        return convertGeckoStringToId(cx, from.get_nsString(), to);
765ab5eaab5b12281c1cbad4c8a0828e37c92ba7 Bug 1071177 - Introduce JSIDVariant type for CPOWs. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209089
diff changeset
   415
765ab5eaab5b12281c1cbad4c8a0828e37c92ba7 Bug 1071177 - Introduce JSIDVariant type for CPOWs. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209089
diff changeset
   416
      case JSIDVariant::Tint32_t:
765ab5eaab5b12281c1cbad4c8a0828e37c92ba7 Bug 1071177 - Introduce JSIDVariant type for CPOWs. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209089
diff changeset
   417
        to.set(INT_TO_JSID(from.get_int32_t()));
765ab5eaab5b12281c1cbad4c8a0828e37c92ba7 Bug 1071177 - Introduce JSIDVariant type for CPOWs. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209089
diff changeset
   418
        return true;
765ab5eaab5b12281c1cbad4c8a0828e37c92ba7 Bug 1071177 - Introduce JSIDVariant type for CPOWs. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209089
diff changeset
   419
765ab5eaab5b12281c1cbad4c8a0828e37c92ba7 Bug 1071177 - Introduce JSIDVariant type for CPOWs. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209089
diff changeset
   420
      default:
765ab5eaab5b12281c1cbad4c8a0828e37c92ba7 Bug 1071177 - Introduce JSIDVariant type for CPOWs. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209089
diff changeset
   421
        return false;
765ab5eaab5b12281c1cbad4c8a0828e37c92ba7 Bug 1071177 - Introduce JSIDVariant type for CPOWs. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209089
diff changeset
   422
    }
765ab5eaab5b12281c1cbad4c8a0828e37c92ba7 Bug 1071177 - Introduce JSIDVariant type for CPOWs. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209089
diff changeset
   423
}
765ab5eaab5b12281c1cbad4c8a0828e37c92ba7 Bug 1071177 - Introduce JSIDVariant type for CPOWs. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209089
diff changeset
   424
209133
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   425
bool
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   426
JavaScriptShared::toSymbolVariant(JSContext *cx, JS::Symbol *symArg, SymbolVariant *symVarp)
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   427
{
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   428
    RootedSymbol sym(cx, symArg);
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   429
    MOZ_ASSERT(sym);
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   430
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   431
    SymbolCode code = GetSymbolCode(sym);
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   432
    if (static_cast<uint32_t>(code) < WellKnownSymbolLimit) {
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   433
        *symVarp = WellKnownSymbol(static_cast<uint32_t>(code));
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   434
        return true;
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   435
    }
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   436
    if (code == SymbolCode::InSymbolRegistry) {
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   437
        nsAutoJSString autoStr;
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   438
        if (!autoStr.init(cx, GetSymbolDescription(sym)))
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   439
            return false;
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   440
        *symVarp = RegisteredSymbol(autoStr);
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   441
        return true;
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   442
    }
210796
f5b05c63480d804fb91dd9a8a7ee54421695282f Bug 1071177 - Support symbol keys and throw exception on unique symbols with CPOWs. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209134
diff changeset
   443
f5b05c63480d804fb91dd9a8a7ee54421695282f Bug 1071177 - Support symbol keys and throw exception on unique symbols with CPOWs. r=billm
Tom Schuster <evilpies@gmail.com>
parents: 209134
diff changeset
   444
    JS_ReportError(cx, "unique symbol can't be used with CPOW");
209133
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   445
    return false;
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   446
}
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   447
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   448
JS::Symbol *
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   449
JavaScriptShared::fromSymbolVariant(JSContext *cx, SymbolVariant symVar)
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   450
{
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   451
    switch (symVar.type()) {
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   452
      case SymbolVariant::TWellKnownSymbol: {
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   453
        uint32_t which = symVar.get_WellKnownSymbol().which();
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   454
        if (which < WellKnownSymbolLimit)
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   455
            return GetWellKnownSymbol(cx, static_cast<SymbolCode>(which));
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   456
        MOZ_ASSERT(false, "bad child data");
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   457
        return nullptr;
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   458
      }
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   459
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   460
      case SymbolVariant::TRegisteredSymbol: {
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   461
        nsString key = symVar.get_RegisteredSymbol().key();
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   462
        RootedString str(cx, JS_NewUCStringCopyN(cx, key.get(), key.Length()));
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   463
        if (!str)
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   464
            return nullptr;
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   465
        return GetSymbolFor(cx, str);
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   466
      }
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   467
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   468
      default:
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   469
        return nullptr;
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   470
    }
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   471
}
6e6f184e59285a2dcdf106c830e7ec0db2da6a97 Bug 1071177 - Add support for well-known and registered symbols as CPOW jsids. r=billm,jorendorff
Tom Schuster <evilpies@gmail.com>
parents: 209132
diff changeset
   472
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   473
/* static */ void
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   474
JavaScriptShared::ConvertID(const nsID &from, JSIID *to)
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   475
{
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   476
    to->m0() = from.m0;
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   477
    to->m1() = from.m1;
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   478
    to->m2() = from.m2;
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   479
    to->m3_0() = from.m3[0];
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   480
    to->m3_1() = from.m3[1];
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   481
    to->m3_2() = from.m3[2];
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   482
    to->m3_3() = from.m3[3];
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   483
    to->m3_4() = from.m3[4];
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   484
    to->m3_5() = from.m3[5];
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   485
    to->m3_6() = from.m3[6];
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   486
    to->m3_7() = from.m3[7];
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   487
}
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   488
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   489
/* static */ void
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   490
JavaScriptShared::ConvertID(const JSIID &from, nsID *to)
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   491
{
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   492
    to->m0 = from.m0();
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   493
    to->m1 = from.m1();
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   494
    to->m2 = from.m2();
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   495
    to->m3[0] = from.m3_0();
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   496
    to->m3[1] = from.m3_1();
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   497
    to->m3[2] = from.m3_2();
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   498
    to->m3[3] = from.m3_3();
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   499
    to->m3[4] = from.m3_4();
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   500
    to->m3[5] = from.m3_5();
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   501
    to->m3[6] = from.m3_6();
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   502
    to->m3[7] = from.m3_7();
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   503
}
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   504
183652
a141144b6c99a87d255fe9e7753611ec3755d280 Bug 996785 - Fix CPOW wrapping and compartment ownership (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183651
diff changeset
   505
JSObject *
207252
bc71142337a34496ae657fcade46e04c1214b71f Bug 1065811 - Clean up ObjectId handling with static type checking. r=billm
Bobby Holley <bobbyholley@gmail.com>
parents: 207020
diff changeset
   506
JavaScriptShared::findObjectById(JSContext *cx, const ObjectId &objId)
183651
9055e91c6154d4372c1fb498cbc51da20cca505b Bug 996785 - Bidirectional CPOWs (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183649
diff changeset
   507
{
207253
4d94f2bf456a1a941851bd8ee0e50a52dffd61c1 Bug 1065811 - Track Xray waivers with CPOWs. r=billm
Bobby Holley <bobbyholley@gmail.com>
parents: 207252
diff changeset
   508
    RootedObject obj(cx, objects_.find(objId));
183652
a141144b6c99a87d255fe9e7753611ec3755d280 Bug 996785 - Fix CPOW wrapping and compartment ownership (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183651
diff changeset
   509
    if (!obj) {
a141144b6c99a87d255fe9e7753611ec3755d280 Bug 996785 - Fix CPOW wrapping and compartment ownership (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183651
diff changeset
   510
        JS_ReportError(cx, "operation not possible on dead CPOW");
a141144b6c99a87d255fe9e7753611ec3755d280 Bug 996785 - Fix CPOW wrapping and compartment ownership (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183651
diff changeset
   511
        return nullptr;
a141144b6c99a87d255fe9e7753611ec3755d280 Bug 996785 - Fix CPOW wrapping and compartment ownership (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183651
diff changeset
   512
    }
a141144b6c99a87d255fe9e7753611ec3755d280 Bug 996785 - Fix CPOW wrapping and compartment ownership (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183651
diff changeset
   513
205145
71c10a155c9cefbbdb203aa889c33216152f5dcb Bug 1052096 - Move CPOW targets into the privileged/unprivileged junk scope of the child/parent. r=billm
Bobby Holley <bobbyholley@gmail.com>
parents: 204857
diff changeset
   514
    // Each process has a dedicated compartment for CPOW targets. All CPOWs
71c10a155c9cefbbdb203aa889c33216152f5dcb Bug 1052096 - Move CPOW targets into the privileged/unprivileged junk scope of the child/parent. r=billm
Bobby Holley <bobbyholley@gmail.com>
parents: 204857
diff changeset
   515
    // from the other process point to objects in this scope. From there, they
71c10a155c9cefbbdb203aa889c33216152f5dcb Bug 1052096 - Move CPOW targets into the privileged/unprivileged junk scope of the child/parent. r=billm
Bobby Holley <bobbyholley@gmail.com>
parents: 204857
diff changeset
   516
    // can access objects in other compartments using cross-compartment
71c10a155c9cefbbdb203aa889c33216152f5dcb Bug 1052096 - Move CPOW targets into the privileged/unprivileged junk scope of the child/parent. r=billm
Bobby Holley <bobbyholley@gmail.com>
parents: 204857
diff changeset
   517
    // wrappers.
71c10a155c9cefbbdb203aa889c33216152f5dcb Bug 1052096 - Move CPOW targets into the privileged/unprivileged junk scope of the child/parent. r=billm
Bobby Holley <bobbyholley@gmail.com>
parents: 204857
diff changeset
   518
    JSAutoCompartment ac(cx, scopeForTargetObjects());
207253
4d94f2bf456a1a941851bd8ee0e50a52dffd61c1 Bug 1065811 - Track Xray waivers with CPOWs. r=billm
Bobby Holley <bobbyholley@gmail.com>
parents: 207252
diff changeset
   519
    if (objId.hasXrayWaiver()) {
213682
0e314ec744bea4fe2cb9128bfcea0290ab3fedab Bug 1073631 - Add mising waivier outerizing for CPOWs (r=bholley)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 211341
diff changeset
   520
        {
0e314ec744bea4fe2cb9128bfcea0290ab3fedab Bug 1073631 - Add mising waivier outerizing for CPOWs (r=bholley)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 211341
diff changeset
   521
            JSAutoCompartment ac2(cx, obj);
0e314ec744bea4fe2cb9128bfcea0290ab3fedab Bug 1073631 - Add mising waivier outerizing for CPOWs (r=bholley)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 211341
diff changeset
   522
            obj = JS_ObjectToOuterObject(cx, obj);
0e314ec744bea4fe2cb9128bfcea0290ab3fedab Bug 1073631 - Add mising waivier outerizing for CPOWs (r=bholley)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 211341
diff changeset
   523
            if (!obj)
0e314ec744bea4fe2cb9128bfcea0290ab3fedab Bug 1073631 - Add mising waivier outerizing for CPOWs (r=bholley)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 211341
diff changeset
   524
                return nullptr;
0e314ec744bea4fe2cb9128bfcea0290ab3fedab Bug 1073631 - Add mising waivier outerizing for CPOWs (r=bholley)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 211341
diff changeset
   525
        }
207253
4d94f2bf456a1a941851bd8ee0e50a52dffd61c1 Bug 1065811 - Track Xray waivers with CPOWs. r=billm
Bobby Holley <bobbyholley@gmail.com>
parents: 207252
diff changeset
   526
        if (!xpc::WrapperFactory::WaiveXrayAndWrap(cx, &obj))
4d94f2bf456a1a941851bd8ee0e50a52dffd61c1 Bug 1065811 - Track Xray waivers with CPOWs. r=billm
Bobby Holley <bobbyholley@gmail.com>
parents: 207252
diff changeset
   527
            return nullptr;
4d94f2bf456a1a941851bd8ee0e50a52dffd61c1 Bug 1065811 - Track Xray waivers with CPOWs. r=billm
Bobby Holley <bobbyholley@gmail.com>
parents: 207252
diff changeset
   528
    } else {
4d94f2bf456a1a941851bd8ee0e50a52dffd61c1 Bug 1065811 - Track Xray waivers with CPOWs. r=billm
Bobby Holley <bobbyholley@gmail.com>
parents: 207252
diff changeset
   529
        if (!JS_WrapObject(cx, &obj))
4d94f2bf456a1a941851bd8ee0e50a52dffd61c1 Bug 1065811 - Track Xray waivers with CPOWs. r=billm
Bobby Holley <bobbyholley@gmail.com>
parents: 207252
diff changeset
   530
            return nullptr;
4d94f2bf456a1a941851bd8ee0e50a52dffd61c1 Bug 1065811 - Track Xray waivers with CPOWs. r=billm
Bobby Holley <bobbyholley@gmail.com>
parents: 207252
diff changeset
   531
    }
183652
a141144b6c99a87d255fe9e7753611ec3755d280 Bug 996785 - Fix CPOW wrapping and compartment ownership (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183651
diff changeset
   532
    return obj;
183651
9055e91c6154d4372c1fb498cbc51da20cca505b Bug 996785 - Bidirectional CPOWs (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183649
diff changeset
   533
}
9055e91c6154d4372c1fb498cbc51da20cca505b Bug 996785 - Bidirectional CPOWs (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183649
diff changeset
   534
217298
56ebb99d774eef30488e7fcca268308ed15e0660 Backed out changeset d201babc2e84 (bug 1103368)
Wes Kocher <wkocher@mozilla.com>
parents: 217297
diff changeset
   535
static const uint64_t DefaultPropertyOp = 1;
56ebb99d774eef30488e7fcca268308ed15e0660 Backed out changeset d201babc2e84 (bug 1103368)
Wes Kocher <wkocher@mozilla.com>
parents: 217297
diff changeset
   536
static const uint64_t UnknownPropertyOp = 2;
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   537
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   538
bool
141991
db34065a8666ff7d7f460056b28282619830e33c Bug 862115 - Use Rooted<JSPropertyDescriptor> in favor of JSPropertyDescriptor::AutoRooter r=terrence r=smaug r=bholley
Terrence Cole <terrence@mozilla.com>
parents: 141957
diff changeset
   539
JavaScriptShared::fromDescriptor(JSContext *cx, Handle<JSPropertyDescriptor> desc,
db34065a8666ff7d7f460056b28282619830e33c Bug 862115 - Use Rooted<JSPropertyDescriptor> in favor of JSPropertyDescriptor::AutoRooter r=terrence r=smaug r=bholley
Terrence Cole <terrence@mozilla.com>
parents: 141957
diff changeset
   540
                                 PPropertyDescriptor *out)
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   541
{
141991
db34065a8666ff7d7f460056b28282619830e33c Bug 862115 - Use Rooted<JSPropertyDescriptor> in favor of JSPropertyDescriptor::AutoRooter r=terrence r=smaug r=bholley
Terrence Cole <terrence@mozilla.com>
parents: 141957
diff changeset
   542
    out->attrs() = desc.attributes();
db34065a8666ff7d7f460056b28282619830e33c Bug 862115 - Use Rooted<JSPropertyDescriptor> in favor of JSPropertyDescriptor::AutoRooter r=terrence r=smaug r=bholley
Terrence Cole <terrence@mozilla.com>
parents: 141957
diff changeset
   543
    if (!toVariant(cx, desc.value(), &out->value()))
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   544
        return false;
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   545
211341
8f34e100ffeae9f08d07a5e293533822c0656d52 Bug 1077587 - Handle non-existent properties in CPOW descriptor code (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 210796
diff changeset
   546
    if (!toObjectOrNullVariant(cx, desc.object(), &out->obj()))
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   547
        return false;
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   548
141991
db34065a8666ff7d7f460056b28282619830e33c Bug 862115 - Use Rooted<JSPropertyDescriptor> in favor of JSPropertyDescriptor::AutoRooter r=terrence r=smaug r=bholley
Terrence Cole <terrence@mozilla.com>
parents: 141957
diff changeset
   549
    if (!desc.getter()) {
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   550
        out->getter() = 0;
141991
db34065a8666ff7d7f460056b28282619830e33c Bug 862115 - Use Rooted<JSPropertyDescriptor> in favor of JSPropertyDescriptor::AutoRooter r=terrence r=smaug r=bholley
Terrence Cole <terrence@mozilla.com>
parents: 141957
diff changeset
   551
    } else if (desc.hasGetterObject()) {
db34065a8666ff7d7f460056b28282619830e33c Bug 862115 - Use Rooted<JSPropertyDescriptor> in favor of JSPropertyDescriptor::AutoRooter r=terrence r=smaug r=bholley
Terrence Cole <terrence@mozilla.com>
parents: 141957
diff changeset
   552
        JSObject *getter = desc.getterObject();
183649
990ea6bcfa07a5ca68d6439f275a18c249f222c9 Bug 996785 - Distinguish local and remote CPOW objects in IPDL (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183648
diff changeset
   553
        ObjectVariant objVar;
990ea6bcfa07a5ca68d6439f275a18c249f222c9 Bug 996785 - Distinguish local and remote CPOW objects in IPDL (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183648
diff changeset
   554
        if (!toObjectVariant(cx, getter, &objVar))
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   555
            return false;
183649
990ea6bcfa07a5ca68d6439f275a18c249f222c9 Bug 996785 - Distinguish local and remote CPOW objects in IPDL (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183648
diff changeset
   556
        out->getter() = objVar;
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   557
    } else {
217297
c80672f72db67fa665c49642f2a73801b27249d8 Backed out changeset b4b619628d1d (bug 1103368) for b2g build bustage
Wes Kocher <wkocher@mozilla.com>
parents: 217291
diff changeset
   558
        if (desc.getter() == JS_PropertyStub)
217298
56ebb99d774eef30488e7fcca268308ed15e0660 Backed out changeset d201babc2e84 (bug 1103368)
Wes Kocher <wkocher@mozilla.com>
parents: 217297
diff changeset
   559
            out->getter() = DefaultPropertyOp;
217297
c80672f72db67fa665c49642f2a73801b27249d8 Backed out changeset b4b619628d1d (bug 1103368) for b2g build bustage
Wes Kocher <wkocher@mozilla.com>
parents: 217291
diff changeset
   560
        else
c80672f72db67fa665c49642f2a73801b27249d8 Backed out changeset b4b619628d1d (bug 1103368) for b2g build bustage
Wes Kocher <wkocher@mozilla.com>
parents: 217291
diff changeset
   561
            out->getter() = UnknownPropertyOp;
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   562
    }
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   563
141991
db34065a8666ff7d7f460056b28282619830e33c Bug 862115 - Use Rooted<JSPropertyDescriptor> in favor of JSPropertyDescriptor::AutoRooter r=terrence r=smaug r=bholley
Terrence Cole <terrence@mozilla.com>
parents: 141957
diff changeset
   564
    if (!desc.setter()) {
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   565
        out->setter() = 0;
141991
db34065a8666ff7d7f460056b28282619830e33c Bug 862115 - Use Rooted<JSPropertyDescriptor> in favor of JSPropertyDescriptor::AutoRooter r=terrence r=smaug r=bholley
Terrence Cole <terrence@mozilla.com>
parents: 141957
diff changeset
   566
    } else if (desc.hasSetterObject()) {
db34065a8666ff7d7f460056b28282619830e33c Bug 862115 - Use Rooted<JSPropertyDescriptor> in favor of JSPropertyDescriptor::AutoRooter r=terrence r=smaug r=bholley
Terrence Cole <terrence@mozilla.com>
parents: 141957
diff changeset
   567
        JSObject *setter = desc.setterObject();
183649
990ea6bcfa07a5ca68d6439f275a18c249f222c9 Bug 996785 - Distinguish local and remote CPOW objects in IPDL (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183648
diff changeset
   568
        ObjectVariant objVar;
990ea6bcfa07a5ca68d6439f275a18c249f222c9 Bug 996785 - Distinguish local and remote CPOW objects in IPDL (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183648
diff changeset
   569
        if (!toObjectVariant(cx, setter, &objVar))
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   570
            return false;
183649
990ea6bcfa07a5ca68d6439f275a18c249f222c9 Bug 996785 - Distinguish local and remote CPOW objects in IPDL (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183648
diff changeset
   571
        out->setter() = objVar;
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   572
    } else {
217297
c80672f72db67fa665c49642f2a73801b27249d8 Backed out changeset b4b619628d1d (bug 1103368) for b2g build bustage
Wes Kocher <wkocher@mozilla.com>
parents: 217291
diff changeset
   573
        if (desc.setter() == JS_StrictPropertyStub)
217298
56ebb99d774eef30488e7fcca268308ed15e0660 Backed out changeset d201babc2e84 (bug 1103368)
Wes Kocher <wkocher@mozilla.com>
parents: 217297
diff changeset
   574
            out->setter() = DefaultPropertyOp;
217297
c80672f72db67fa665c49642f2a73801b27249d8 Backed out changeset b4b619628d1d (bug 1103368) for b2g build bustage
Wes Kocher <wkocher@mozilla.com>
parents: 217291
diff changeset
   575
        else
c80672f72db67fa665c49642f2a73801b27249d8 Backed out changeset b4b619628d1d (bug 1103368) for b2g build bustage
Wes Kocher <wkocher@mozilla.com>
parents: 217291
diff changeset
   576
            out->setter() = UnknownPropertyOp;
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   577
    }
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   578
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   579
    return true;
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   580
}
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   581
141957
Nicholas Nethercote <nnethercote@mozilla.com>
parents: 141746
diff changeset
   582
bool
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   583
UnknownPropertyStub(JSContext *cx, HandleObject obj, HandleId id, MutableHandleValue vp)
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   584
{
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   585
    JS_ReportError(cx, "getter could not be wrapped via CPOWs");
141746
ade325617a7322f9869ce67b359255c542c74587 Bug 902332 - Replace JS_{FALSE,TRUE} with {false,true} almost everywhere. r=luke,bz.
Nicholas Nethercote <nnethercote@mozilla.com>
parents: 141744
diff changeset
   586
    return false;
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   587
}
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   588
141957
Nicholas Nethercote <nnethercote@mozilla.com>
parents: 141746
diff changeset
   589
bool
Nicholas Nethercote <nnethercote@mozilla.com>
parents: 141746
diff changeset
   590
UnknownStrictPropertyStub(JSContext *cx, HandleObject obj, HandleId id, bool strict, MutableHandleValue vp)
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   591
{
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   592
    JS_ReportError(cx, "setter could not be wrapped via CPOWs");
141746
ade325617a7322f9869ce67b359255c542c74587 Bug 902332 - Replace JS_{FALSE,TRUE} with {false,true} almost everywhere. r=luke,bz.
Nicholas Nethercote <nnethercote@mozilla.com>
parents: 141744
diff changeset
   593
    return false;
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   594
}
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   595
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   596
bool
141991
db34065a8666ff7d7f460056b28282619830e33c Bug 862115 - Use Rooted<JSPropertyDescriptor> in favor of JSPropertyDescriptor::AutoRooter r=terrence r=smaug r=bholley
Terrence Cole <terrence@mozilla.com>
parents: 141957
diff changeset
   597
JavaScriptShared::toDescriptor(JSContext *cx, const PPropertyDescriptor &in,
db34065a8666ff7d7f460056b28282619830e33c Bug 862115 - Use Rooted<JSPropertyDescriptor> in favor of JSPropertyDescriptor::AutoRooter r=terrence r=smaug r=bholley
Terrence Cole <terrence@mozilla.com>
parents: 141957
diff changeset
   598
                               MutableHandle<JSPropertyDescriptor> out)
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   599
{
141991
db34065a8666ff7d7f460056b28282619830e33c Bug 862115 - Use Rooted<JSPropertyDescriptor> in favor of JSPropertyDescriptor::AutoRooter r=terrence r=smaug r=bholley
Terrence Cole <terrence@mozilla.com>
parents: 141957
diff changeset
   600
    out.setAttributes(in.attrs());
183643
9631faa6ed6754f5ab7b07ce40725e31482ec55f Bug 996785 - Rename CPOW toValue (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183641
diff changeset
   601
    if (!fromVariant(cx, in.value(), out.value()))
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   602
        return false;
211341
8f34e100ffeae9f08d07a5e293533822c0656d52 Bug 1077587 - Handle non-existent properties in CPOW descriptor code (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 210796
diff changeset
   603
    out.object().set(fromObjectOrNullVariant(cx, in.obj()));
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   604
183649
990ea6bcfa07a5ca68d6439f275a18c249f222c9 Bug 996785 - Distinguish local and remote CPOW objects in IPDL (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183648
diff changeset
   605
    if (in.getter().type() == GetterSetter::Tuint64_t && !in.getter().get_uint64_t()) {
141991
db34065a8666ff7d7f460056b28282619830e33c Bug 862115 - Use Rooted<JSPropertyDescriptor> in favor of JSPropertyDescriptor::AutoRooter r=terrence r=smaug r=bholley
Terrence Cole <terrence@mozilla.com>
parents: 141957
diff changeset
   606
        out.setGetter(nullptr);
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   607
    } else if (in.attrs() & JSPROP_GETTER) {
141744
fc2421f4b5fe062cb032ce8ec2f889a00a3f9955 Bug 902249 - Fix some exact rooting hazards in js/ipc; r=jonco
Terrence Cole <terrence@mozilla.com>
parents: 140919
diff changeset
   608
        Rooted<JSObject*> getter(cx);
183649
990ea6bcfa07a5ca68d6439f275a18c249f222c9 Bug 996785 - Distinguish local and remote CPOW objects in IPDL (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183648
diff changeset
   609
        getter = fromObjectVariant(cx, in.getter().get_ObjectVariant());
990ea6bcfa07a5ca68d6439f275a18c249f222c9 Bug 996785 - Distinguish local and remote CPOW objects in IPDL (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183648
diff changeset
   610
        if (!getter)
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   611
            return false;
141991
db34065a8666ff7d7f460056b28282619830e33c Bug 862115 - Use Rooted<JSPropertyDescriptor> in favor of JSPropertyDescriptor::AutoRooter r=terrence r=smaug r=bholley
Terrence Cole <terrence@mozilla.com>
parents: 141957
diff changeset
   612
        out.setGetter(JS_DATA_TO_FUNC_PTR(JSPropertyOp, getter.get()));
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   613
    } else {
217298
56ebb99d774eef30488e7fcca268308ed15e0660 Backed out changeset d201babc2e84 (bug 1103368)
Wes Kocher <wkocher@mozilla.com>
parents: 217297
diff changeset
   614
        if (in.getter().get_uint64_t() == DefaultPropertyOp)
56ebb99d774eef30488e7fcca268308ed15e0660 Backed out changeset d201babc2e84 (bug 1103368)
Wes Kocher <wkocher@mozilla.com>
parents: 217297
diff changeset
   615
            out.setGetter(JS_PropertyStub);
56ebb99d774eef30488e7fcca268308ed15e0660 Backed out changeset d201babc2e84 (bug 1103368)
Wes Kocher <wkocher@mozilla.com>
parents: 217297
diff changeset
   616
        else
56ebb99d774eef30488e7fcca268308ed15e0660 Backed out changeset d201babc2e84 (bug 1103368)
Wes Kocher <wkocher@mozilla.com>
parents: 217297
diff changeset
   617
            out.setGetter(UnknownPropertyStub);
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   618
    }
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   619
183649
990ea6bcfa07a5ca68d6439f275a18c249f222c9 Bug 996785 - Distinguish local and remote CPOW objects in IPDL (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183648
diff changeset
   620
    if (in.setter().type() == GetterSetter::Tuint64_t && !in.setter().get_uint64_t()) {
141991
db34065a8666ff7d7f460056b28282619830e33c Bug 862115 - Use Rooted<JSPropertyDescriptor> in favor of JSPropertyDescriptor::AutoRooter r=terrence r=smaug r=bholley
Terrence Cole <terrence@mozilla.com>
parents: 141957
diff changeset
   621
        out.setSetter(nullptr);
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   622
    } else if (in.attrs() & JSPROP_SETTER) {
141744
fc2421f4b5fe062cb032ce8ec2f889a00a3f9955 Bug 902249 - Fix some exact rooting hazards in js/ipc; r=jonco
Terrence Cole <terrence@mozilla.com>
parents: 140919
diff changeset
   623
        Rooted<JSObject*> setter(cx);
183649
990ea6bcfa07a5ca68d6439f275a18c249f222c9 Bug 996785 - Distinguish local and remote CPOW objects in IPDL (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183648
diff changeset
   624
        setter = fromObjectVariant(cx, in.setter().get_ObjectVariant());
990ea6bcfa07a5ca68d6439f275a18c249f222c9 Bug 996785 - Distinguish local and remote CPOW objects in IPDL (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183648
diff changeset
   625
        if (!setter)
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   626
            return false;
141991
db34065a8666ff7d7f460056b28282619830e33c Bug 862115 - Use Rooted<JSPropertyDescriptor> in favor of JSPropertyDescriptor::AutoRooter r=terrence r=smaug r=bholley
Terrence Cole <terrence@mozilla.com>
parents: 141957
diff changeset
   627
        out.setSetter(JS_DATA_TO_FUNC_PTR(JSStrictPropertyOp, setter.get()));
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   628
    } else {
217298
56ebb99d774eef30488e7fcca268308ed15e0660 Backed out changeset d201babc2e84 (bug 1103368)
Wes Kocher <wkocher@mozilla.com>
parents: 217297
diff changeset
   629
        if (in.setter().get_uint64_t() == DefaultPropertyOp)
56ebb99d774eef30488e7fcca268308ed15e0660 Backed out changeset d201babc2e84 (bug 1103368)
Wes Kocher <wkocher@mozilla.com>
parents: 217297
diff changeset
   630
            out.setSetter(JS_StrictPropertyStub);
56ebb99d774eef30488e7fcca268308ed15e0660 Backed out changeset d201babc2e84 (bug 1103368)
Wes Kocher <wkocher@mozilla.com>
parents: 217297
diff changeset
   631
        else
56ebb99d774eef30488e7fcca268308ed15e0660 Backed out changeset d201babc2e84 (bug 1103368)
Wes Kocher <wkocher@mozilla.com>
parents: 217297
diff changeset
   632
            out.setSetter(UnknownStrictPropertyStub);
137301
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   633
    }
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   634
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   635
    return true;
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   636
}
0c45375d507ee8699f6a25760263234f7c9e8823 Rewrite CPOWs to use one actor per process (bug 853209, r=billm,bholley,smaug).
David Anderson <danderson@mozilla.com>
parents:
diff changeset
   637
211341
8f34e100ffeae9f08d07a5e293533822c0656d52 Bug 1077587 - Handle non-existent properties in CPOW descriptor code (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 210796
diff changeset
   638
bool
8f34e100ffeae9f08d07a5e293533822c0656d52 Bug 1077587 - Handle non-existent properties in CPOW descriptor code (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 210796
diff changeset
   639
JavaScriptShared::toObjectOrNullVariant(JSContext *cx, JSObject *obj, ObjectOrNullVariant *objVarp)
8f34e100ffeae9f08d07a5e293533822c0656d52 Bug 1077587 - Handle non-existent properties in CPOW descriptor code (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 210796
diff changeset
   640
{
8f34e100ffeae9f08d07a5e293533822c0656d52 Bug 1077587 - Handle non-existent properties in CPOW descriptor code (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 210796
diff changeset
   641
    if (!obj) {
8f34e100ffeae9f08d07a5e293533822c0656d52 Bug 1077587 - Handle non-existent properties in CPOW descriptor code (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 210796
diff changeset
   642
        *objVarp = NullVariant();
8f34e100ffeae9f08d07a5e293533822c0656d52 Bug 1077587 - Handle non-existent properties in CPOW descriptor code (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 210796
diff changeset
   643
        return true;
8f34e100ffeae9f08d07a5e293533822c0656d52 Bug 1077587 - Handle non-existent properties in CPOW descriptor code (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 210796
diff changeset
   644
    }
8f34e100ffeae9f08d07a5e293533822c0656d52 Bug 1077587 - Handle non-existent properties in CPOW descriptor code (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 210796
diff changeset
   645
8f34e100ffeae9f08d07a5e293533822c0656d52 Bug 1077587 - Handle non-existent properties in CPOW descriptor code (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 210796
diff changeset
   646
    ObjectVariant objVar;
8f34e100ffeae9f08d07a5e293533822c0656d52 Bug 1077587 - Handle non-existent properties in CPOW descriptor code (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 210796
diff changeset
   647
    if (!toObjectVariant(cx, obj, &objVar))
8f34e100ffeae9f08d07a5e293533822c0656d52 Bug 1077587 - Handle non-existent properties in CPOW descriptor code (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 210796
diff changeset
   648
        return false;
8f34e100ffeae9f08d07a5e293533822c0656d52 Bug 1077587 - Handle non-existent properties in CPOW descriptor code (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 210796
diff changeset
   649
8f34e100ffeae9f08d07a5e293533822c0656d52 Bug 1077587 - Handle non-existent properties in CPOW descriptor code (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 210796
diff changeset
   650
    *objVarp = objVar;
8f34e100ffeae9f08d07a5e293533822c0656d52 Bug 1077587 - Handle non-existent properties in CPOW descriptor code (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 210796
diff changeset
   651
    return true;
8f34e100ffeae9f08d07a5e293533822c0656d52 Bug 1077587 - Handle non-existent properties in CPOW descriptor code (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 210796
diff changeset
   652
}
8f34e100ffeae9f08d07a5e293533822c0656d52 Bug 1077587 - Handle non-existent properties in CPOW descriptor code (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 210796
diff changeset
   653
8f34e100ffeae9f08d07a5e293533822c0656d52 Bug 1077587 - Handle non-existent properties in CPOW descriptor code (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 210796
diff changeset
   654
JSObject *
8f34e100ffeae9f08d07a5e293533822c0656d52 Bug 1077587 - Handle non-existent properties in CPOW descriptor code (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 210796
diff changeset
   655
JavaScriptShared::fromObjectOrNullVariant(JSContext *cx, ObjectOrNullVariant objVar)
8f34e100ffeae9f08d07a5e293533822c0656d52 Bug 1077587 - Handle non-existent properties in CPOW descriptor code (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 210796
diff changeset
   656
{
8f34e100ffeae9f08d07a5e293533822c0656d52 Bug 1077587 - Handle non-existent properties in CPOW descriptor code (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 210796
diff changeset
   657
    if (objVar.type() == ObjectOrNullVariant::TNullVariant)
8f34e100ffeae9f08d07a5e293533822c0656d52 Bug 1077587 - Handle non-existent properties in CPOW descriptor code (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 210796
diff changeset
   658
        return nullptr;
8f34e100ffeae9f08d07a5e293533822c0656d52 Bug 1077587 - Handle non-existent properties in CPOW descriptor code (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 210796
diff changeset
   659
8f34e100ffeae9f08d07a5e293533822c0656d52 Bug 1077587 - Handle non-existent properties in CPOW descriptor code (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 210796
diff changeset
   660
    return fromObjectVariant(cx, objVar.get_ObjectVariant());
8f34e100ffeae9f08d07a5e293533822c0656d52 Bug 1077587 - Handle non-existent properties in CPOW descriptor code (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 210796
diff changeset
   661
}
8f34e100ffeae9f08d07a5e293533822c0656d52 Bug 1077587 - Handle non-existent properties in CPOW descriptor code (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 210796
diff changeset
   662
209089
bb3b6a3a021c88daef318ea94fcb0875b023ac3a Bug 1073597, part 3 - Lazify creation of the CPOW manager in CpowIdHolder. r=billm
Andrew McCreight <continuation@gmail.com>
parents: 208230
diff changeset
   663
CpowIdHolder::CpowIdHolder(dom::CPOWManagerGetter *managerGetter, const InfallibleTArray<CpowEntry> &cpows)
bb3b6a3a021c88daef318ea94fcb0875b023ac3a Bug 1073597, part 3 - Lazify creation of the CPOW manager in CpowIdHolder. r=billm
Andrew McCreight <continuation@gmail.com>
parents: 208230
diff changeset
   664
  : js_(nullptr),
bb3b6a3a021c88daef318ea94fcb0875b023ac3a Bug 1073597, part 3 - Lazify creation of the CPOW manager in CpowIdHolder. r=billm
Andrew McCreight <continuation@gmail.com>
parents: 208230
diff changeset
   665
    cpows_(cpows)
bb3b6a3a021c88daef318ea94fcb0875b023ac3a Bug 1073597, part 3 - Lazify creation of the CPOW manager in CpowIdHolder. r=billm
Andrew McCreight <continuation@gmail.com>
parents: 208230
diff changeset
   666
{
bb3b6a3a021c88daef318ea94fcb0875b023ac3a Bug 1073597, part 3 - Lazify creation of the CPOW manager in CpowIdHolder. r=billm
Andrew McCreight <continuation@gmail.com>
parents: 208230
diff changeset
   667
    // Only instantiate the CPOW manager if we might need it later.
bb3b6a3a021c88daef318ea94fcb0875b023ac3a Bug 1073597, part 3 - Lazify creation of the CPOW manager in CpowIdHolder. r=billm
Andrew McCreight <continuation@gmail.com>
parents: 208230
diff changeset
   668
    if (cpows.Length())
bb3b6a3a021c88daef318ea94fcb0875b023ac3a Bug 1073597, part 3 - Lazify creation of the CPOW manager in CpowIdHolder. r=billm
Andrew McCreight <continuation@gmail.com>
parents: 208230
diff changeset
   669
        js_ = managerGetter->GetCPOWManager();
bb3b6a3a021c88daef318ea94fcb0875b023ac3a Bug 1073597, part 3 - Lazify creation of the CPOW manager in CpowIdHolder. r=billm
Andrew McCreight <continuation@gmail.com>
parents: 208230
diff changeset
   670
}
bb3b6a3a021c88daef318ea94fcb0875b023ac3a Bug 1073597, part 3 - Lazify creation of the CPOW manager in CpowIdHolder. r=billm
Andrew McCreight <continuation@gmail.com>
parents: 208230
diff changeset
   671
138493
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   672
bool
150816
5126b48adf91390db142ee55bc9c19cc1b9ae801 Bug 8844105 - Handlify JS_WrapObject. r=terrence
Tom Schuster <evilpies@gmail.com>
parents: 150565
diff changeset
   673
CpowIdHolder::ToObject(JSContext *cx, JS::MutableHandleObject objp)
138493
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   674
{
209089
bb3b6a3a021c88daef318ea94fcb0875b023ac3a Bug 1073597, part 3 - Lazify creation of the CPOW manager in CpowIdHolder. r=billm
Andrew McCreight <continuation@gmail.com>
parents: 208230
diff changeset
   675
    if (!cpows_.Length())
bb3b6a3a021c88daef318ea94fcb0875b023ac3a Bug 1073597, part 3 - Lazify creation of the CPOW manager in CpowIdHolder. r=billm
Andrew McCreight <continuation@gmail.com>
parents: 208230
diff changeset
   676
        return true;
bb3b6a3a021c88daef318ea94fcb0875b023ac3a Bug 1073597, part 3 - Lazify creation of the CPOW manager in CpowIdHolder. r=billm
Andrew McCreight <continuation@gmail.com>
parents: 208230
diff changeset
   677
138493
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   678
    return js_->Unwrap(cx, cpows_, objp);
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   679
}
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   680
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   681
bool
150816
5126b48adf91390db142ee55bc9c19cc1b9ae801 Bug 8844105 - Handlify JS_WrapObject. r=terrence
Tom Schuster <evilpies@gmail.com>
parents: 150565
diff changeset
   682
JavaScriptShared::Unwrap(JSContext *cx, const InfallibleTArray<CpowEntry> &aCpows,
5126b48adf91390db142ee55bc9c19cc1b9ae801 Bug 8844105 - Handlify JS_WrapObject. r=terrence
Tom Schuster <evilpies@gmail.com>
parents: 150565
diff changeset
   683
                         JS::MutableHandleObject objp)
138493
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   684
{
150816
5126b48adf91390db142ee55bc9c19cc1b9ae801 Bug 8844105 - Handlify JS_WrapObject. r=terrence
Tom Schuster <evilpies@gmail.com>
parents: 150565
diff changeset
   685
    objp.set(nullptr);
138493
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   686
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   687
    if (!aCpows.Length())
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   688
        return true;
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   689
163837
bf6cb0c04562e9fa13364b1043805ad8e9a77aaf Bug 959787 - Handlify several JSAPI interfaces that can GC, Part 3; r=sfink
Terrence Cole <terrence@mozilla.com>
parents: 158689
diff changeset
   690
    RootedObject obj(cx, JS_NewObject(cx, nullptr, JS::NullPtr(), JS::NullPtr()));
138493
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   691
    if (!obj)
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   692
        return false;
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   693
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   694
    RootedValue v(cx);
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   695
    RootedString str(cx);
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   696
    for (size_t i = 0; i < aCpows.Length(); i++) {
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   697
        const nsString &name = aCpows[i].name();
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   698
183643
9631faa6ed6754f5ab7b07ce40725e31482ec55f Bug 996785 - Rename CPOW toValue (r=mrbkap)
Bill McCloskey <wmccloskey@mozilla.com>
parents: 183641
diff changeset
   699
        if (!fromVariant(cx, aCpows[i].value(), &v))
138493
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   700
            return false;
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   701
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   702
        if (!JS_DefineUCProperty(cx,
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   703
                                 obj,
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   704
                                 name.BeginReading(),
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   705
                                 name.Length(),
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   706
                                 v,
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   707
                                 JSPROP_ENUMERATE))
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   708
        {
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   709
            return false;
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   710
        }
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   711
    }
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   712
150816
5126b48adf91390db142ee55bc9c19cc1b9ae801 Bug 8844105 - Handlify JS_WrapObject. r=terrence
Tom Schuster <evilpies@gmail.com>
parents: 150565
diff changeset
   713
    objp.set(obj);
138493
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   714
    return true;
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   715
}
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   716
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   717
bool
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   718
JavaScriptShared::Wrap(JSContext *cx, HandleObject aObj, InfallibleTArray<CpowEntry> *outCpows)
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   719
{
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   720
    if (!aObj)
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   721
        return true;
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   722
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   723
    AutoIdArray ids(cx, JS_Enumerate(cx, aObj));
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   724
    if (!ids)
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   725
        return false;
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   726
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   727
    RootedId id(cx);
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   728
    RootedValue v(cx);
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   729
    for (size_t i = 0; i < ids.length(); i++) {
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   730
        id = ids[i];
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   731
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   732
        nsString str;
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   733
        if (!convertIdToGeckoString(cx, id, &str))
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   734
            return false;
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   735
140353
e80edaac389923fbfbeff054ac391dfaae4b262e Bug 897484 - GC: Convert JS_GetProperty APIs to take MutableHandleValue r=terrence r=bholley r=smaug
Jon Coppeard <jcoppeard@mozilla.com>
parents: 140143
diff changeset
   736
        if (!JS_GetPropertyById(cx, aObj, id, &v))
138493
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   737
            return false;
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   738
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   739
        JSVariant var;
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   740
        if (!toVariant(cx, v, &var))
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   741
            return false;
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   742
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   743
        outCpows->AppendElement(CpowEntry(str, var));
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   744
    }
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   745
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   746
    return true;
58fe760f66d8997077d0cde7274b935197f0f5c9 Implement CPOW support in MessageManager (bug 870180, r=smaug,billm).
David Anderson <danderson@mozilla.com>
parents: 138074
diff changeset
   747
}