// Copyright (c) 2010 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_FRAME_INFOBARS_INFOBAR_CONTENT_H_ #define CHROME_FRAME_INFOBARS_INFOBAR_CONTENT_H_ #include // Provides an interface between content to be displayed in an infobar and the // infobar facility. Pass an instance of your implementation to // InfobarManager::Show, which will result in a call to InstallInFrame to // initialize the InfobarContent. // // The instance will be deleted by the infobar facility when it is no longer // being displayed (or immediately, in the case of a failure to display). class InfobarContent { public: // Provides access to the content's parent window and allows the // InfobarContent to close itself, such as in response to user interaction. class Frame { public: virtual ~Frame() {} // Returns the window in which the content should display itself. virtual HWND GetFrameWindow() = 0; // Initiates closing of the infobar. virtual void CloseInfobar() = 0; }; // class Frame virtual ~InfobarContent() {} // Prepares the content to display in the provided frame. // // The frame pointer remains valid until the InfobarContent instance is // deleted. virtual bool InstallInFrame(Frame* frame) = 0; // Provides the content with the dimensions available to it for display. // Dimensions are relative to the origin of the frame window. virtual void SetDimensions(const RECT& dimensions) = 0; // Finds the desired value for one dimension given a fixed value for the other // dimension. The fixed dimension parameter is non-zero whereas the requested // dimension parameter will be zero. virtual size_t GetDesiredSize(size_t width, size_t height) = 0; }; // class InfobarContent #endif // CHROME_FRAME_INFOBARS_INFOBAR_CONTENT_H_