
The DanglingPointerDetector is configured only when the test enters the ContentMain function. See https://crbug.com/1400059 I would like to configure it no matter the kind of test. For this to happen, we need to annotate every pre-existing dangling pointers. This patch annotates the ones you can find by running targets depending on the GoogleTest library. Statistic: This adds 1776 new DanglingUntriaged. Among them: - 1288 are in unittests. - 488 are in implementation. To produce those numbers, I used the command: ```bash git diff annotate-linux origin/main -- "*test*" | grep "DanglingUntriaged" | wc -l ``` This patch has been generated by: 1. Apply the "auto-annotator" patch: https://chromium-review.googlesource.com/c/chromium/src/+/4474553 2. Compile the compiler again: ```bash ./tools/clang/scripts/build.py ``` 3. List and run all the targets. You can use a bash script like: https://docs.google.com/document/d/1AMMERcqy0eafFWopUCHYsIKIKEp3J8DFxqW9UIbzIHo 4. Concatenate output, filter by "Found dangling ptr", sort, remove duplicate. 5. Apply the rewriter script from: https://github.com/ArthurSonzogni/chrome-dangling-ptr-apply-edit 6. Revert the "auto-annotate" patch. 7. Apply `git cl format` AX-Relnotes: n/a. Bug: chromium:1400059 Change-Id: I217d5c0b925da5176fc53baf95919a3690f1e9a3 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4570424 Reviewed-by: danakj <danakj@chromium.org> Owners-Override: danakj <danakj@chromium.org> Commit-Queue: Arthur Sonzogni <arthursonzogni@chromium.org> Cr-Commit-Position: refs/heads/main@{#1151859}
123 lines
4.3 KiB
C++
123 lines
4.3 KiB
C++
// Copyright 2014 The Chromium Authors
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#ifndef CHROME_BROWSER_EXTENSIONS_EXTERNAL_INSTALL_MANAGER_H_
|
|
#define CHROME_BROWSER_EXTENSIONS_EXTERNAL_INSTALL_MANAGER_H_
|
|
|
|
#include <map>
|
|
#include <memory>
|
|
|
|
#include "base/memory/raw_ptr.h"
|
|
#include "base/scoped_observation.h"
|
|
#include "extensions/browser/extension_registry.h"
|
|
#include "extensions/browser/extension_registry_observer.h"
|
|
#include "extensions/common/extension_id.h"
|
|
|
|
namespace content {
|
|
class BrowserContext;
|
|
}
|
|
|
|
namespace extensions {
|
|
class Extension;
|
|
class ExtensionPrefs;
|
|
class ExternalInstallError;
|
|
|
|
class ExternalInstallManager : public ExtensionRegistryObserver {
|
|
public:
|
|
ExternalInstallManager(content::BrowserContext* browser_context,
|
|
bool is_first_run);
|
|
|
|
ExternalInstallManager(const ExternalInstallManager&) = delete;
|
|
ExternalInstallManager& operator=(const ExternalInstallManager&) = delete;
|
|
|
|
~ExternalInstallManager() override;
|
|
|
|
// Called when the associated profile will be destroyed.
|
|
void Shutdown();
|
|
|
|
// Returns true if prompting for external extensions is enabled.
|
|
static bool IsPromptingEnabled();
|
|
|
|
// Removes the error associated with a given extension.
|
|
void RemoveExternalInstallError(const std::string& extension_id);
|
|
|
|
// Checks if there are any new external extensions to notify the user about.
|
|
void UpdateExternalExtensionAlert();
|
|
|
|
// Given a (presumably just-installed) extension id, mark that extension as
|
|
// acknowledged.
|
|
void AcknowledgeExternalExtension(const std::string& extension_id);
|
|
|
|
// Notifies the manager that |external_install_error| has changed its alert
|
|
// visibility.
|
|
void DidChangeInstallAlertVisibility(
|
|
ExternalInstallError* external_install_error,
|
|
bool visible);
|
|
|
|
bool has_currently_visible_install_alert() {
|
|
return currently_visible_install_alert_ != nullptr;
|
|
}
|
|
|
|
ExternalInstallError* currently_visible_install_alert_for_testing() const {
|
|
return currently_visible_install_alert_;
|
|
}
|
|
|
|
// Returns a mutable copy of the list of global errors for testing purposes.
|
|
std::vector<ExternalInstallError*> GetErrorsForTesting();
|
|
|
|
// Clears the record of shown IDs for testing.
|
|
void ClearShownIdsForTesting();
|
|
|
|
private:
|
|
// ExtensionRegistryObserver implementation.
|
|
void OnExtensionLoaded(content::BrowserContext* browser_context,
|
|
const Extension* extension) override;
|
|
void OnExtensionInstalled(content::BrowserContext* browser_context,
|
|
const Extension* extension,
|
|
bool is_update) override;
|
|
void OnExtensionUninstalled(content::BrowserContext* browser_context,
|
|
const Extension* extension,
|
|
extensions::UninstallReason reason) override;
|
|
|
|
// Adds a global error informing the user that an external extension was
|
|
// installed. If |is_new_profile| is true, then this error is from the first
|
|
// time our profile checked for new extensions.
|
|
void AddExternalInstallError(const Extension* extension, bool is_new_profile);
|
|
|
|
// Returns true if this extension is an external one that has yet to be
|
|
// marked as acknowledged.
|
|
bool IsUnacknowledgedExternalExtension(const Extension& extension) const;
|
|
|
|
// The associated BrowserContext.
|
|
raw_ptr<content::BrowserContext> browser_context_;
|
|
|
|
// Whether or not this is the first run for the profile.
|
|
bool is_first_run_;
|
|
|
|
// The associated ExtensionPrefs.
|
|
raw_ptr<ExtensionPrefs> extension_prefs_;
|
|
|
|
// The collection of ExternalInstallErrors.
|
|
std::map<std::string, std::unique_ptr<ExternalInstallError>> errors_;
|
|
|
|
// The set of ids of unacknowledged external extensions. Populated at
|
|
// initialization, and then updated as extensions are added, removed,
|
|
// acknowledged, etc.
|
|
std::set<ExtensionId> unacknowledged_ids_;
|
|
|
|
// The set of ids of extensions that we have warned about in this session.
|
|
std::set<ExtensionId> shown_ids_;
|
|
|
|
// The error that is currently showing an alert dialog/bubble.
|
|
raw_ptr<ExternalInstallError, DanglingUntriaged>
|
|
currently_visible_install_alert_;
|
|
|
|
base::ScopedObservation<ExtensionRegistry, ExtensionRegistryObserver>
|
|
extension_registry_observation_{this};
|
|
};
|
|
|
|
} // namespace extensions
|
|
|
|
#endif // CHROME_BROWSER_EXTENSIONS_EXTERNAL_INSTALL_MANAGER_H_
|