| Index: chrome/browser/extensions/api/app_current_window_internal/app_current_window_internal_api.cc
|
| diff --git a/chrome/browser/extensions/api/app_current_window_internal/app_current_window_internal_api.cc b/chrome/browser/extensions/api/app_current_window_internal/app_current_window_internal_api.cc
|
| deleted file mode 100644
|
| index 18554f7cba492090c8b714d9b1eeedcdecc52d5c..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/extensions/api/app_current_window_internal/app_current_window_internal_api.cc
|
| +++ /dev/null
|
| @@ -1,416 +0,0 @@
|
| -// Copyright (c) 2012 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.
|
| -
|
| -#include "chrome/browser/extensions/api/app_current_window_internal/app_current_window_internal_api.h"
|
| -
|
| -#include "base/command_line.h"
|
| -#include "chrome/browser/profiles/profile.h"
|
| -#include "chrome/common/extensions/api/app_current_window_internal.h"
|
| -#include "chrome/common/extensions/features/feature_channel.h"
|
| -#include "extensions/browser/app_window/app_window.h"
|
| -#include "extensions/browser/app_window/app_window_registry.h"
|
| -#include "extensions/browser/app_window/native_app_window.h"
|
| -#include "extensions/browser/app_window/size_constraints.h"
|
| -#include "extensions/common/features/simple_feature.h"
|
| -#include "extensions/common/permissions/permissions_data.h"
|
| -#include "extensions/common/switches.h"
|
| -#include "third_party/skia/include/core/SkRegion.h"
|
| -
|
| -namespace app_current_window_internal =
|
| - extensions::api::app_current_window_internal;
|
| -
|
| -namespace Show = app_current_window_internal::Show;
|
| -namespace SetBounds = app_current_window_internal::SetBounds;
|
| -namespace SetSizeConstraints = app_current_window_internal::SetSizeConstraints;
|
| -namespace SetIcon = app_current_window_internal::SetIcon;
|
| -namespace SetBadgeIcon = app_current_window_internal::SetBadgeIcon;
|
| -namespace SetShape = app_current_window_internal::SetShape;
|
| -namespace SetAlwaysOnTop = app_current_window_internal::SetAlwaysOnTop;
|
| -namespace SetVisibleOnAllWorkspaces =
|
| - app_current_window_internal::SetVisibleOnAllWorkspaces;
|
| -
|
| -using app_current_window_internal::Bounds;
|
| -using app_current_window_internal::Region;
|
| -using app_current_window_internal::RegionRect;
|
| -using app_current_window_internal::SizeConstraints;
|
| -
|
| -namespace extensions {
|
| -
|
| -namespace {
|
| -
|
| -const char kNoAssociatedAppWindow[] =
|
| - "The context from which the function was called did not have an "
|
| - "associated app window.";
|
| -
|
| -const char kDevChannelOnly[] =
|
| - "This function is currently only available in the Dev channel.";
|
| -
|
| -const char kRequiresFramelessWindow[] =
|
| - "This function requires a frameless window (frame:none).";
|
| -
|
| -const char kAlwaysOnTopPermission[] =
|
| - "The \"app.window.alwaysOnTop\" permission is required.";
|
| -
|
| -const char kInvalidParameters[] = "Invalid parameters.";
|
| -
|
| -const int kUnboundedSize = SizeConstraints::kUnboundedSize;
|
| -
|
| -void GetBoundsFields(const Bounds& bounds_spec, gfx::Rect* bounds) {
|
| - if (bounds_spec.left)
|
| - bounds->set_x(*bounds_spec.left);
|
| - if (bounds_spec.top)
|
| - bounds->set_y(*bounds_spec.top);
|
| - if (bounds_spec.width)
|
| - bounds->set_width(*bounds_spec.width);
|
| - if (bounds_spec.height)
|
| - bounds->set_height(*bounds_spec.height);
|
| -}
|
| -
|
| -// Copy the constraint value from the API to our internal representation of
|
| -// content size constraints. A value of zero resets the constraints. The insets
|
| -// are used to transform window constraints to content constraints.
|
| -void GetConstraintWidth(const scoped_ptr<int>& width,
|
| - const gfx::Insets& insets,
|
| - gfx::Size* size) {
|
| - if (!width.get())
|
| - return;
|
| -
|
| - size->set_width(*width > 0 ? std::max(0, *width - insets.width())
|
| - : kUnboundedSize);
|
| -}
|
| -
|
| -void GetConstraintHeight(const scoped_ptr<int>& height,
|
| - const gfx::Insets& insets,
|
| - gfx::Size* size) {
|
| - if (!height.get())
|
| - return;
|
| -
|
| - size->set_height(*height > 0 ? std::max(0, *height - insets.height())
|
| - : kUnboundedSize);
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -namespace bounds {
|
| -
|
| -enum BoundsType {
|
| - INNER_BOUNDS,
|
| - OUTER_BOUNDS,
|
| - DEPRECATED_BOUNDS,
|
| - INVALID_TYPE
|
| -};
|
| -
|
| -const char kInnerBoundsType[] = "innerBounds";
|
| -const char kOuterBoundsType[] = "outerBounds";
|
| -const char kDeprecatedBoundsType[] = "bounds";
|
| -
|
| -BoundsType GetBoundsType(const std::string& type_as_string) {
|
| - if (type_as_string == kInnerBoundsType)
|
| - return INNER_BOUNDS;
|
| - else if (type_as_string == kOuterBoundsType)
|
| - return OUTER_BOUNDS;
|
| - else if (type_as_string == kDeprecatedBoundsType)
|
| - return DEPRECATED_BOUNDS;
|
| - else
|
| - return INVALID_TYPE;
|
| -}
|
| -
|
| -} // namespace bounds
|
| -
|
| -bool AppCurrentWindowInternalExtensionFunction::RunSync() {
|
| - AppWindowRegistry* registry = AppWindowRegistry::Get(GetProfile());
|
| - DCHECK(registry);
|
| - content::RenderViewHost* rvh = render_view_host();
|
| - if (!rvh)
|
| - // No need to set an error, since we won't return to the caller anyway if
|
| - // there's no RVH.
|
| - return false;
|
| - AppWindow* window = registry->GetAppWindowForRenderViewHost(rvh);
|
| - if (!window) {
|
| - error_ = kNoAssociatedAppWindow;
|
| - return false;
|
| - }
|
| - return RunWithWindow(window);
|
| -}
|
| -
|
| -bool AppCurrentWindowInternalFocusFunction::RunWithWindow(AppWindow* window) {
|
| - window->GetBaseWindow()->Activate();
|
| - return true;
|
| -}
|
| -
|
| -bool AppCurrentWindowInternalFullscreenFunction::RunWithWindow(
|
| - AppWindow* window) {
|
| - window->Fullscreen();
|
| - return true;
|
| -}
|
| -
|
| -bool AppCurrentWindowInternalMaximizeFunction::RunWithWindow(
|
| - AppWindow* window) {
|
| - window->Maximize();
|
| - return true;
|
| -}
|
| -
|
| -bool AppCurrentWindowInternalMinimizeFunction::RunWithWindow(
|
| - AppWindow* window) {
|
| - window->Minimize();
|
| - return true;
|
| -}
|
| -
|
| -bool AppCurrentWindowInternalRestoreFunction::RunWithWindow(AppWindow* window) {
|
| - window->Restore();
|
| - return true;
|
| -}
|
| -
|
| -bool AppCurrentWindowInternalDrawAttentionFunction::RunWithWindow(
|
| - AppWindow* window) {
|
| - window->GetBaseWindow()->FlashFrame(true);
|
| - return true;
|
| -}
|
| -
|
| -bool AppCurrentWindowInternalClearAttentionFunction::RunWithWindow(
|
| - AppWindow* window) {
|
| - window->GetBaseWindow()->FlashFrame(false);
|
| - return true;
|
| -}
|
| -
|
| -bool AppCurrentWindowInternalShowFunction::RunWithWindow(AppWindow* window) {
|
| - scoped_ptr<Show::Params> params(Show::Params::Create(*args_));
|
| - CHECK(params.get());
|
| - if (params->focused && !*params->focused)
|
| - window->Show(AppWindow::SHOW_INACTIVE);
|
| - else
|
| - window->Show(AppWindow::SHOW_ACTIVE);
|
| - return true;
|
| -}
|
| -
|
| -bool AppCurrentWindowInternalHideFunction::RunWithWindow(AppWindow* window) {
|
| - window->Hide();
|
| - return true;
|
| -}
|
| -
|
| -bool AppCurrentWindowInternalSetBoundsFunction::RunWithWindow(
|
| - AppWindow* window) {
|
| - scoped_ptr<SetBounds::Params> params(SetBounds::Params::Create(*args_));
|
| - CHECK(params.get());
|
| -
|
| - bounds::BoundsType bounds_type = bounds::GetBoundsType(params->bounds_type);
|
| - if (bounds_type == bounds::INVALID_TYPE) {
|
| - NOTREACHED();
|
| - error_ = kInvalidParameters;
|
| - return false;
|
| - }
|
| -
|
| - // Start with the current bounds, and change any values that are specified in
|
| - // the incoming parameters.
|
| - gfx::Rect original_window_bounds = window->GetBaseWindow()->GetBounds();
|
| - gfx::Rect window_bounds = original_window_bounds;
|
| - gfx::Insets frame_insets = window->GetBaseWindow()->GetFrameInsets();
|
| - const Bounds& bounds_spec = params->bounds;
|
| -
|
| - switch (bounds_type) {
|
| - case bounds::DEPRECATED_BOUNDS: {
|
| - // We need to maintain backcompatibility with a bug on Windows and
|
| - // ChromeOS, which sets the position of the window but the size of the
|
| - // content.
|
| - if (bounds_spec.left)
|
| - window_bounds.set_x(*bounds_spec.left);
|
| - if (bounds_spec.top)
|
| - window_bounds.set_y(*bounds_spec.top);
|
| - if (bounds_spec.width)
|
| - window_bounds.set_width(*bounds_spec.width + frame_insets.width());
|
| - if (bounds_spec.height)
|
| - window_bounds.set_height(*bounds_spec.height + frame_insets.height());
|
| - break;
|
| - }
|
| - case bounds::OUTER_BOUNDS: {
|
| - GetBoundsFields(bounds_spec, &window_bounds);
|
| - break;
|
| - }
|
| - case bounds::INNER_BOUNDS: {
|
| - window_bounds.Inset(frame_insets);
|
| - GetBoundsFields(bounds_spec, &window_bounds);
|
| - window_bounds.Inset(-frame_insets);
|
| - break;
|
| - }
|
| - default:
|
| - NOTREACHED();
|
| - }
|
| -
|
| - if (original_window_bounds != window_bounds) {
|
| - if (original_window_bounds.size() != window_bounds.size()) {
|
| - SizeConstraints constraints(
|
| - SizeConstraints::AddFrameToConstraints(
|
| - window->GetBaseWindow()->GetContentMinimumSize(), frame_insets),
|
| - SizeConstraints::AddFrameToConstraints(
|
| - window->GetBaseWindow()->GetContentMaximumSize(), frame_insets));
|
| -
|
| - window_bounds.set_size(constraints.ClampSize(window_bounds.size()));
|
| - }
|
| -
|
| - window->GetBaseWindow()->SetBounds(window_bounds);
|
| - }
|
| -
|
| - return true;
|
| -}
|
| -
|
| -bool AppCurrentWindowInternalSetSizeConstraintsFunction::RunWithWindow(
|
| - AppWindow* window) {
|
| - scoped_ptr<SetSizeConstraints::Params> params(
|
| - SetSizeConstraints::Params::Create(*args_));
|
| - CHECK(params.get());
|
| -
|
| - bounds::BoundsType bounds_type = bounds::GetBoundsType(params->bounds_type);
|
| - if (bounds_type != bounds::INNER_BOUNDS &&
|
| - bounds_type != bounds::OUTER_BOUNDS) {
|
| - NOTREACHED();
|
| - error_ = kInvalidParameters;
|
| - return false;
|
| - }
|
| -
|
| - gfx::Size original_min_size =
|
| - window->GetBaseWindow()->GetContentMinimumSize();
|
| - gfx::Size original_max_size =
|
| - window->GetBaseWindow()->GetContentMaximumSize();
|
| - gfx::Size min_size = original_min_size;
|
| - gfx::Size max_size = original_max_size;
|
| - const api::app_current_window_internal::SizeConstraints& constraints =
|
| - params->constraints;
|
| -
|
| - // Use the frame insets to convert window size constraints to content size
|
| - // constraints.
|
| - gfx::Insets insets;
|
| - if (bounds_type == bounds::OUTER_BOUNDS)
|
| - insets = window->GetBaseWindow()->GetFrameInsets();
|
| -
|
| - GetConstraintWidth(constraints.min_width, insets, &min_size);
|
| - GetConstraintWidth(constraints.max_width, insets, &max_size);
|
| - GetConstraintHeight(constraints.min_height, insets, &min_size);
|
| - GetConstraintHeight(constraints.max_height, insets, &max_size);
|
| -
|
| - if (min_size != original_min_size || max_size != original_max_size)
|
| - window->SetContentSizeConstraints(min_size, max_size);
|
| -
|
| - return true;
|
| -}
|
| -
|
| -bool AppCurrentWindowInternalSetIconFunction::RunWithWindow(AppWindow* window) {
|
| - if (GetCurrentChannel() > chrome::VersionInfo::CHANNEL_DEV &&
|
| - extension()->location() != extensions::Manifest::COMPONENT) {
|
| - error_ = kDevChannelOnly;
|
| - return false;
|
| - }
|
| -
|
| - scoped_ptr<SetIcon::Params> params(SetIcon::Params::Create(*args_));
|
| - CHECK(params.get());
|
| - // The |icon_url| parameter may be a blob url (e.g. an image fetched with an
|
| - // XMLHttpRequest) or a resource url.
|
| - GURL url(params->icon_url);
|
| - if (!url.is_valid())
|
| - url = extension()->GetResourceURL(params->icon_url);
|
| -
|
| - window->SetAppIconUrl(url);
|
| - return true;
|
| -}
|
| -
|
| -bool AppCurrentWindowInternalSetBadgeIconFunction::RunWithWindow(
|
| - AppWindow* window) {
|
| - if (GetCurrentChannel() > chrome::VersionInfo::CHANNEL_DEV) {
|
| - error_ = kDevChannelOnly;
|
| - return false;
|
| - }
|
| -
|
| - scoped_ptr<SetBadgeIcon::Params> params(SetBadgeIcon::Params::Create(*args_));
|
| - CHECK(params.get());
|
| - // The |icon_url| parameter may be a blob url (e.g. an image fetched with an
|
| - // XMLHttpRequest) or a resource url.
|
| - GURL url(params->icon_url);
|
| - if (!url.is_valid() && !params->icon_url.empty())
|
| - url = extension()->GetResourceURL(params->icon_url);
|
| -
|
| - window->SetBadgeIconUrl(url);
|
| - return true;
|
| -}
|
| -
|
| -bool AppCurrentWindowInternalClearBadgeFunction::RunWithWindow(
|
| - AppWindow* window) {
|
| - if (GetCurrentChannel() > chrome::VersionInfo::CHANNEL_DEV) {
|
| - error_ = kDevChannelOnly;
|
| - return false;
|
| - }
|
| -
|
| - window->ClearBadge();
|
| - return true;
|
| -}
|
| -
|
| -bool AppCurrentWindowInternalSetShapeFunction::RunWithWindow(
|
| - AppWindow* window) {
|
| -
|
| - if (!window->GetBaseWindow()->IsFrameless()) {
|
| - error_ = kRequiresFramelessWindow;
|
| - return false;
|
| - }
|
| -
|
| - scoped_ptr<SetShape::Params> params(
|
| - SetShape::Params::Create(*args_));
|
| - const Region& shape = params->region;
|
| -
|
| - // Build a region from the supplied list of rects.
|
| - // If |rects| is missing, then the input region is removed. This clears the
|
| - // input region so that the entire window accepts input events.
|
| - // To specify an empty input region (so the window ignores all input),
|
| - // |rects| should be an empty list.
|
| - scoped_ptr<SkRegion> region(new SkRegion);
|
| - if (shape.rects) {
|
| - for (std::vector<linked_ptr<RegionRect> >::const_iterator i =
|
| - shape.rects->begin();
|
| - i != shape.rects->end();
|
| - ++i) {
|
| - const RegionRect& inputRect = **i;
|
| - int32_t x = inputRect.left;
|
| - int32_t y = inputRect.top;
|
| - int32_t width = inputRect.width;
|
| - int32_t height = inputRect.height;
|
| -
|
| - SkIRect rect = SkIRect::MakeXYWH(x, y, width, height);
|
| - region->op(rect, SkRegion::kUnion_Op);
|
| - }
|
| - } else {
|
| - region.reset(NULL);
|
| - }
|
| -
|
| - window->UpdateShape(region.Pass());
|
| -
|
| - return true;
|
| -}
|
| -
|
| -bool AppCurrentWindowInternalSetAlwaysOnTopFunction::RunWithWindow(
|
| - AppWindow* window) {
|
| - if (!extension()->permissions_data()->HasAPIPermission(
|
| - extensions::APIPermission::kAlwaysOnTopWindows)) {
|
| - error_ = kAlwaysOnTopPermission;
|
| - return false;
|
| - }
|
| -
|
| - scoped_ptr<SetAlwaysOnTop::Params> params(
|
| - SetAlwaysOnTop::Params::Create(*args_));
|
| - CHECK(params.get());
|
| - window->SetAlwaysOnTop(params->always_on_top);
|
| - return true;
|
| -}
|
| -
|
| -bool AppCurrentWindowInternalSetVisibleOnAllWorkspacesFunction::RunWithWindow(
|
| - AppWindow* window) {
|
| - if (GetCurrentChannel() > chrome::VersionInfo::CHANNEL_DEV) {
|
| - error_ = kDevChannelOnly;
|
| - return false;
|
| - }
|
| -
|
| - scoped_ptr<SetVisibleOnAllWorkspaces::Params> params(
|
| - SetVisibleOnAllWorkspaces::Params::Create(*args_));
|
| - CHECK(params.get());
|
| - window->GetBaseWindow()->SetVisibleOnAllWorkspaces(params->always_visible);
|
| - return true;
|
| -}
|
| -
|
| -} // namespace extensions
|
|
|