gfx/skia/trunk/include/utils/SkPictureUtils.h

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

     1 /*
     2  * Copyright 2012 Google Inc.
     3  *
     4  * Use of this source code is governed by a BSD-style license that can be
     5  * found in the LICENSE file.
     6  */
     8 #ifndef SkPictureUtils_DEFINED
     9 #define SkPictureUtils_DEFINED
    11 #include "SkPicture.h"
    12 #include "SkTDArray.h"
    14 class SkData;
    15 struct SkRect;
    17 class SK_API SkPictureUtils {
    18 public:
    19     /**
    20      *  Given a rectangular visible "window" into the picture, return an array
    21      *  of SkPixelRefs that might intersect that area. To keep the call fast,
    22      *  the returned list is not guaranteed to be exact, so it may miss some,
    23      *  and it may return false positives.
    24      *
    25      *  The pixelrefs returned in the SkData are already owned by the picture,
    26      *  so the returned pointers are only valid while the picture is in scope
    27      *  and remains unchanged.
    28      */
    29     static SkData* GatherPixelRefs(SkPicture* pict, const SkRect& area);
    31     /**
    32      * SkPixelRefContainer provides a base class for more elaborate pixel ref
    33      * query structures (e.g., rtrees, quad-trees, etc.)
    34      */
    35     class SkPixelRefContainer : public SkRefCnt {
    36     public:
    37         virtual void add(SkPixelRef* pr, const SkRect& rect) = 0;
    39         // The returned array may contain duplicates
    40         virtual void query(const SkRect& queryRect, SkTDArray<SkPixelRef*> *result) = 0;
    42     private:
    43         typedef SkRefCnt INHERITED;
    44     };
    46     // Simple query structure that just stores a linked list of pixel refs
    47     // and rects.
    48     class SkPixelRefsAndRectsList : public SkPixelRefContainer {
    49     public:
    50         virtual void add(SkPixelRef* pr, const SkRect& rect) SK_OVERRIDE {
    51             PixelRefAndRect *dst = fArray.append();
    53             dst->fPixelRef = pr;
    54             dst->fRect = rect;
    55         }
    57         virtual void query(const SkRect& queryRect, SkTDArray<SkPixelRef*> *result) SK_OVERRIDE {
    58             for (int i = 0; i < fArray.count(); ++i) {
    59                 if (SkRect::Intersects(fArray[i].fRect, queryRect)) {
    60                     *result->append() = fArray[i].fPixelRef;
    61                 }
    62             }
    63         }
    65     private:
    66         struct PixelRefAndRect {
    67             SkPixelRef* fPixelRef;
    68             SkRect      fRect;
    69         };
    71         SkTDArray<PixelRefAndRect> fArray;
    73         typedef SkPixelRefContainer INHERITED;
    74     };
    76     /**
    77      *  Fill the provided pixel ref container with the picture's pixel ref
    78      *  and rect information.
    79      */
    80     static void GatherPixelRefsAndRects(SkPicture* pict, SkPixelRefContainer* prCont);
    81 };
    83 #endif

mercurial