accessible/src/windows/sdn/sdnDocAccessible.cpp

Tue, 06 Jan 2015 21:39:09 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Tue, 06 Jan 2015 21:39:09 +0100
branch
TOR_BUG_9701
changeset 8
97036ab72558
permissions
-rw-r--r--

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 /* vim: set ts=2 et sw=2 tw=80: */
     3 /* This Source Code Form is subject to the terms of the Mozilla Public
     4  * License, v. 2.0. If a copy of the MPL was not distributed with this
     5  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     7 #include "sdnDocAccessible.h"
     9 #include "ISimpleDOMDocument_i.c"
    11 using namespace mozilla;
    12 using namespace mozilla::a11y;
    14 ////////////////////////////////////////////////////////////////////////////////
    15 // sdnDocAccessible
    16 ////////////////////////////////////////////////////////////////////////////////
    18 IMPL_IUNKNOWN_QUERY_HEAD(sdnDocAccessible)
    19   IMPL_IUNKNOWN_QUERY_IFACE(ISimpleDOMDocument)
    20 IMPL_IUNKNOWN_QUERY_TAIL_AGGREGATED(mAccessible)
    22 STDMETHODIMP
    23 sdnDocAccessible::get_URL(BSTR __RPC_FAR* aURL)
    24 {
    25   A11Y_TRYBLOCK_BEGIN
    27   if (!aURL)
    28     return E_INVALIDARG;
    29   *aURL = nullptr;
    31   if (mAccessible->IsDefunct())
    32     return CO_E_OBJNOTCONNECTED;
    34   nsAutoString URL;
    35   nsresult rv = mAccessible->GetURL(URL);
    36   if (NS_FAILED(rv))
    37     return E_FAIL;
    39   if (URL.IsEmpty())
    40     return S_FALSE;
    42   *aURL = ::SysAllocStringLen(URL.get(), URL.Length());
    43   return *aURL ? S_OK : E_OUTOFMEMORY;
    45   A11Y_TRYBLOCK_END
    46 }
    48 STDMETHODIMP
    49 sdnDocAccessible::get_title(BSTR __RPC_FAR* aTitle)
    50 {
    51   A11Y_TRYBLOCK_BEGIN
    53   if (!aTitle)
    54     return E_INVALIDARG;
    55   *aTitle = nullptr;
    57   if (mAccessible->IsDefunct())
    58     return CO_E_OBJNOTCONNECTED;
    60   nsAutoString title;
    61   nsresult rv = mAccessible->GetTitle(title);
    62   if (NS_FAILED(rv))
    63     return E_FAIL;
    65   *aTitle = ::SysAllocStringLen(title.get(), title.Length());
    66   return *aTitle ? S_OK : E_OUTOFMEMORY;
    68   A11Y_TRYBLOCK_END
    69 }
    71 STDMETHODIMP
    72 sdnDocAccessible::get_mimeType(BSTR __RPC_FAR* aMimeType)
    73 {
    74   A11Y_TRYBLOCK_BEGIN
    76   if (!aMimeType)
    77     return E_INVALIDARG;
    78   *aMimeType = nullptr;
    80   if (mAccessible->IsDefunct())
    81     return CO_E_OBJNOTCONNECTED;
    83   nsAutoString mimeType;
    84   nsresult rv = mAccessible->GetMimeType(mimeType);
    85   if (NS_FAILED(rv))
    86     return E_FAIL;
    88   if (mimeType.IsEmpty())
    89     return S_FALSE;
    91   *aMimeType = ::SysAllocStringLen(mimeType.get(), mimeType.Length());
    92   return *aMimeType ? S_OK : E_OUTOFMEMORY;
    94   A11Y_TRYBLOCK_END
    95 }
    97 STDMETHODIMP
    98 sdnDocAccessible::get_docType(BSTR __RPC_FAR* aDocType)
    99 {
   100   A11Y_TRYBLOCK_BEGIN
   102   if (!aDocType)
   103     return E_INVALIDARG;
   104   *aDocType = nullptr;
   106   if (mAccessible->IsDefunct())
   107     return CO_E_OBJNOTCONNECTED;
   109   nsAutoString docType;
   110   nsresult rv = mAccessible->GetDocType(docType);
   111   if (NS_FAILED(rv))
   112     return E_FAIL;
   114   if (docType.IsEmpty())
   115     return S_FALSE;
   117   *aDocType = ::SysAllocStringLen(docType.get(), docType.Length());
   118   return *aDocType ? S_OK : E_OUTOFMEMORY;
   120   A11Y_TRYBLOCK_END
   121 }
   123 STDMETHODIMP
   124 sdnDocAccessible::get_nameSpaceURIForID(short aNameSpaceID,
   125                                         BSTR __RPC_FAR* aNameSpaceURI)
   126 {
   127   A11Y_TRYBLOCK_BEGIN
   129   if (!aNameSpaceURI)
   130     return E_INVALIDARG;
   131   *aNameSpaceURI = nullptr;
   133   if (mAccessible->IsDefunct())
   134     return CO_E_OBJNOTCONNECTED;
   136   if (aNameSpaceID < 0)
   137     return E_INVALIDARG;  // -1 is kNameSpaceID_Unknown
   139   nsAutoString nameSpaceURI;
   140   nsresult rv = mAccessible->GetNameSpaceURIForID(aNameSpaceID, nameSpaceURI);
   141   if (NS_FAILED(rv))
   142     return E_FAIL;
   144   if (nameSpaceURI.IsEmpty())
   145     return S_FALSE;
   147   *aNameSpaceURI = ::SysAllocStringLen(nameSpaceURI.get(),
   148                                        nameSpaceURI.Length());
   150   return *aNameSpaceURI ? S_OK : E_OUTOFMEMORY;
   152   A11Y_TRYBLOCK_END
   153 }
   155 STDMETHODIMP
   156 sdnDocAccessible::put_alternateViewMediaTypes(BSTR __RPC_FAR* aCommaSeparatedMediaTypes)
   157 {
   158   A11Y_TRYBLOCK_BEGIN
   160   if (!aCommaSeparatedMediaTypes)
   161     return E_INVALIDARG;
   162   *aCommaSeparatedMediaTypes = nullptr;
   164   return mAccessible->IsDefunct() ? CO_E_OBJNOTCONNECTED : E_NOTIMPL;
   166   A11Y_TRYBLOCK_END
   167 }

mercurial