gfx/skia/trunk/src/images/bmpdecoderhelper.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.

     2 /*
     3  * Copyright 2007 The Android Open Source Project
     4  *
     5  * Use of this source code is governed by a BSD-style license that can be
     6  * found in the LICENSE file.
     7  */
    10 #ifndef IMAGE_CODEC_BMPDECODERHELPER_H__
    11 #define IMAGE_CODEC_BMPDECODERHELPER_H__
    13 ///////////////////////////////////////////////////////////////////////////////
    14 // this section is my current "glue" between google3 code and android.
    15 // will be fixed soon
    17 #include "SkTypes.h"
    18 #include <limits.h>
    19 #define DISALLOW_EVIL_CONSTRUCTORS(name)
    20 #define CHECK(predicate)  SkASSERT(predicate)
    21 typedef uint8_t uint8;
    22 typedef uint32_t uint32;
    24 template <typename T> class scoped_array {
    25 private:
    26   T* ptr_;
    27   scoped_array(scoped_array const&);
    28   scoped_array& operator=(const scoped_array&);
    30 public:
    31   explicit scoped_array(T* p = 0) : ptr_(p) {}
    32   ~scoped_array() {
    33     delete[] ptr_;
    34   }
    36   void reset(T* p = 0) {
    37     if (p != ptr_) {
    38       delete[] ptr_;
    39       ptr_ = p;
    40     }
    41   }
    43   T& operator[](int i) const {
    44     return ptr_[i];
    45   }
    46 };
    48 ///////////////////////////////////////////////////////////////////////////////
    50 namespace image_codec {
    52 class BmpDecoderCallback {
    53  public:
    54   BmpDecoderCallback() { }
    55   virtual ~BmpDecoderCallback() {}
    57   /**
    58    * This is called once for an image. It is passed the width and height and
    59    * should return the address of a buffer that is large enough to store
    60    * all of the resulting pixels (widht * height * 3 bytes). If it returns NULL,
    61    * then the decoder will abort, but return true, as the caller has received
    62    * valid dimensions.
    63    */
    64   virtual uint8* SetSize(int width, int height) = 0;
    66  private:
    67   DISALLOW_EVIL_CONSTRUCTORS(BmpDecoderCallback);
    68 };
    70 class BmpDecoderHelper {
    71  public:
    72   BmpDecoderHelper() { }
    73   ~BmpDecoderHelper() { }
    74   bool DecodeImage(const char* data,
    75                    size_t len,
    76                    int max_pixels,
    77                    BmpDecoderCallback* callback);
    79  private:
    80   DISALLOW_EVIL_CONSTRUCTORS(BmpDecoderHelper);
    82   void DoRLEDecode();
    83   void DoStandardDecode();
    84   void PutPixel(int x, int y, uint8 col);
    86   int GetInt();
    87   int GetShort();
    88   uint8 GetByte();
    89   int CalcShiftRight(uint32 mask);
    90   int CalcShiftLeft(uint32 mask);
    92   const uint8* data_;
    93   size_t pos_;
    94   size_t len_;
    95   int width_;
    96   int height_;
    97   int bpp_;
    98   int pixelPad_;
    99   int rowPad_;
   100   scoped_array<uint8> colTab_;
   101   uint32 redBits_;
   102   uint32 greenBits_;
   103   uint32 blueBits_;
   104   int redShiftRight_;
   105   int greenShiftRight_;
   106   int blueShiftRight_;
   107   int redShiftLeft_;
   108   int greenShiftLeft_;
   109   int blueShiftLeft_;
   110   uint8* output_;
   111   bool inverted_;
   112 };
   114 } // namespace
   116 #endif

mercurial