Tue, 06 Jan 2015 21:39:09 +0100
Conditionally force memory storage according to privacy.thirdparty.isolate;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 //
7 // Eric Vaughan
8 // Netscape Communications
9 //
10 // See documentation in associated header file
11 //
13 #include "nsGridCell.h"
14 #include "nsFrame.h"
15 #include "nsBox.h"
16 #include "nsGridLayout2.h"
19 nsGridCell::nsGridCell():mBoxInColumn(nullptr),mBoxInRow(nullptr)
20 {
21 MOZ_COUNT_CTOR(nsGridCell);
22 }
24 nsGridCell::~nsGridCell()
25 {
26 MOZ_COUNT_DTOR(nsGridCell);
27 }
29 nsSize
30 nsGridCell::GetPrefSize(nsBoxLayoutState& aState)
31 {
32 nsSize sum(0,0);
34 // take our 2 children and add them up.
35 // we are as wide as the widest child plus its left offset
36 // we are tall as the tallest child plus its top offset
38 if (mBoxInColumn) {
39 nsSize pref = mBoxInColumn->GetPrefSize(aState);
41 nsBox::AddMargin(mBoxInColumn, pref);
42 nsGridLayout2::AddOffset(aState, mBoxInColumn, pref);
44 nsBoxLayout::AddLargestSize(sum, pref);
45 }
47 if (mBoxInRow) {
48 nsSize pref = mBoxInRow->GetPrefSize(aState);
50 nsBox::AddMargin(mBoxInRow, pref);
51 nsGridLayout2::AddOffset(aState, mBoxInRow, pref);
53 nsBoxLayout::AddLargestSize(sum, pref);
54 }
56 return sum;
57 }
59 nsSize
60 nsGridCell::GetMinSize(nsBoxLayoutState& aState)
61 {
62 nsSize sum(0, 0);
64 // take our 2 children and add them up.
65 // we are as wide as the widest child plus its left offset
66 // we are tall as the tallest child plus its top offset
68 if (mBoxInColumn) {
69 nsSize min = mBoxInColumn->GetMinSize(aState);
71 nsBox::AddMargin(mBoxInColumn, min);
72 nsGridLayout2::AddOffset(aState, mBoxInColumn, min);
74 nsBoxLayout::AddLargestSize(sum, min);
75 }
77 if (mBoxInRow) {
78 nsSize min = mBoxInRow->GetMinSize(aState);
80 nsBox::AddMargin(mBoxInRow, min);
81 nsGridLayout2::AddOffset(aState, mBoxInRow, min);
83 nsBoxLayout::AddLargestSize(sum, min);
84 }
86 return sum;
87 }
89 nsSize
90 nsGridCell::GetMaxSize(nsBoxLayoutState& aState)
91 {
92 nsSize sum(NS_INTRINSICSIZE, NS_INTRINSICSIZE);
94 // take our 2 children and add them up.
95 // we are as wide as the smallest child plus its left offset
96 // we are tall as the shortest child plus its top offset
98 if (mBoxInColumn) {
99 nsSize max = mBoxInColumn->GetMaxSize(aState);
101 nsBox::AddMargin(mBoxInColumn, max);
102 nsGridLayout2::AddOffset(aState, mBoxInColumn, max);
104 nsBoxLayout::AddSmallestSize(sum, max);
105 }
107 if (mBoxInRow) {
108 nsSize max = mBoxInRow->GetMaxSize(aState);
110 nsBox::AddMargin(mBoxInRow, max);
111 nsGridLayout2::AddOffset(aState, mBoxInRow, max);
113 nsBoxLayout::AddSmallestSize(sum, max);
114 }
116 return sum;
117 }
120 bool
121 nsGridCell::IsCollapsed()
122 {
123 return ((mBoxInColumn && mBoxInColumn->IsCollapsed()) ||
124 (mBoxInRow && mBoxInRow->IsCollapsed()));
125 }