Fix dangling raw_ptr errors and related issues (see #3239)

- Use raw_ptr in class container fields.
- Use defined lifespan for StreamReaderURLLoader.
- Fix lifespan assumptions for WebContents/RFH usage.
This commit is contained in:
Marshall Greenblatt
2024-05-13 17:36:09 -04:00
parent aad216bf56
commit 6354d8daf1
62 changed files with 644 additions and 484 deletions

View File

@@ -8,7 +8,7 @@
#include <stdio.h>
#include <string>
#include <vector>
#include "base/memory/raw_ptr.h"
#include "base/synchronization/lock.h"
@@ -59,8 +59,8 @@ class CefFileWriter : public CefStreamWriter {
// Implementation of CefStreamReader for byte buffers.
class CefBytesReader : public CefStreamReader {
public:
CefBytesReader(void* data, int64_t datasize, bool copy);
~CefBytesReader() override;
// |data| is always copied.
CefBytesReader(void* data, int64_t datasize);
size_t Read(void* ptr, size_t size, size_t n) override;
int Seek(int64_t offset, int whence) override;
@@ -68,15 +68,11 @@ class CefBytesReader : public CefStreamReader {
int Eof() override;
bool MayBlock() override { return false; }
void SetData(void* data, int64_t datasize, bool copy);
void* GetData() { return data_; }
size_t GetDataSize() { return offset_; }
// |data| is always copied.
void SetData(void* data, int64_t datasize);
protected:
raw_ptr<void> data_ = nullptr;
int64_t datasize_ = 0;
bool copy_ = false;
std::vector<unsigned char> data_;
int64_t offset_ = 0;
base::Lock lock_;
@@ -84,35 +80,6 @@ class CefBytesReader : public CefStreamReader {
IMPLEMENT_REFCOUNTING(CefBytesReader);
};
// Implementation of CefStreamWriter for byte buffers.
class CefBytesWriter : public CefStreamWriter {
public:
explicit CefBytesWriter(size_t grow);
~CefBytesWriter() override;
size_t Write(const void* ptr, size_t size, size_t n) override;
int Seek(int64_t offset, int whence) override;
int64_t Tell() override;
int Flush() override;
bool MayBlock() override { return false; }
void* GetData() { return data_; }
int64_t GetDataSize() { return offset_; }
std::string GetDataString();
protected:
size_t Grow(size_t size);
size_t grow_;
raw_ptr<void> data_;
int64_t datasize_;
int64_t offset_ = 0;
base::Lock lock_;
IMPLEMENT_REFCOUNTING(CefBytesWriter);
};
// Implementation of CefStreamReader for handlers.
class CefHandlerReader : public CefStreamReader {
public: