| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/message_loop/message_loop.h" | 5 #include "base/message_loop/message_loop.h" |
| 6 #include "base/strings/utf_string_conversions.h" | 6 #include "base/strings/utf_string_conversions.h" |
| 7 #include "components/exo/buffer.h" | 7 #include "components/exo/buffer.h" |
| 8 #include "components/exo/shell_surface.h" | 8 #include "components/exo/shell_surface.h" |
| 9 #include "components/exo/surface.h" | 9 #include "components/exo/surface.h" |
| 10 #include "components/exo/test/exo_test_base.h" | 10 #include "components/exo/test/exo_test_base.h" |
| 11 #include "components/exo/test/exo_test_helper.h" | 11 #include "components/exo/test/exo_test_helper.h" |
| 12 #include "testing/gtest/include/gtest/gtest.h" | 12 #include "testing/gtest/include/gtest/gtest.h" |
| 13 #include "third_party/khronos/GLES2/gl2.h" | 13 #include "third_party/khronos/GLES2/gl2.h" |
| 14 #include "ui/aura/window.h" | 14 #include "ui/aura/window.h" |
| 15 #include "ui/views/widget/widget.h" | 15 #include "ui/views/widget/widget.h" |
| 16 | 16 |
| 17 namespace exo { | 17 namespace exo { |
| 18 namespace { | 18 namespace { |
| 19 | 19 |
| 20 using ShellSurfaceTest = test::ExoTestBase; | 20 using ShellSurfaceTest = test::ExoTestBase; |
| 21 | 21 |
| 22 TEST_F(ShellSurfaceTest, Init) { | |
| 23 gfx::Size small_buffer_size(64, 64); | |
| 24 scoped_ptr<Buffer> small_buffer( | |
| 25 new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(small_buffer_size), | |
| 26 GL_TEXTURE_2D)); | |
| 27 gfx::Size large_buffer_size(256, 256); | |
| 28 scoped_ptr<Buffer> large_buffer( | |
| 29 new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(large_buffer_size), | |
| 30 GL_TEXTURE_2D)); | |
| 31 scoped_ptr<Surface> surface(new Surface); | |
| 32 scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); | |
| 33 | |
| 34 shell_surface->Init(); | |
| 35 ASSERT_TRUE(shell_surface->GetWidget()); | |
| 36 | |
| 37 surface->Attach(small_buffer.get()); | |
| 38 surface->Commit(); | |
| 39 EXPECT_EQ( | |
| 40 small_buffer_size.ToString(), | |
| 41 shell_surface->GetWidget()->GetWindowBoundsInScreen().size().ToString()); | |
| 42 | |
| 43 surface->Attach(large_buffer.get()); | |
| 44 surface->Commit(); | |
| 45 EXPECT_EQ( | |
| 46 large_buffer_size.ToString(), | |
| 47 shell_surface->GetWidget()->GetWindowBoundsInScreen().size().ToString()); | |
| 48 } | |
| 49 | |
| 50 TEST_F(ShellSurfaceTest, Maximize) { | 22 TEST_F(ShellSurfaceTest, Maximize) { |
| 51 gfx::Size buffer_size(256, 256); | 23 gfx::Size buffer_size(256, 256); |
| 52 scoped_ptr<Buffer> buffer(new Buffer( | 24 scoped_ptr<Buffer> buffer(new Buffer( |
| 53 exo_test_helper()->CreateGpuMemoryBuffer(buffer_size), GL_TEXTURE_2D)); | 25 exo_test_helper()->CreateGpuMemoryBuffer(buffer_size), GL_TEXTURE_2D)); |
| 54 scoped_ptr<Surface> surface(new Surface); | 26 scoped_ptr<Surface> surface(new Surface); |
| 55 scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); | 27 scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); |
| 56 | 28 |
| 57 shell_surface->Init(); | |
| 58 surface->Attach(buffer.get()); | 29 surface->Attach(buffer.get()); |
| 59 shell_surface->Maximize(); | 30 shell_surface->Maximize(); |
| 60 surface->Commit(); | 31 surface->Commit(); |
| 61 EXPECT_EQ(CurrentContext()->bounds().width(), | 32 EXPECT_EQ(CurrentContext()->bounds().width(), |
| 62 shell_surface->GetWidget()->GetWindowBoundsInScreen().width()); | 33 shell_surface->GetWidget()->GetWindowBoundsInScreen().width()); |
| 63 } | 34 } |
| 64 | 35 |
| 65 TEST_F(ShellSurfaceTest, SetFullscreen) { | 36 TEST_F(ShellSurfaceTest, SetFullscreen) { |
| 66 gfx::Size buffer_size(256, 256); | 37 gfx::Size buffer_size(256, 256); |
| 67 scoped_ptr<Buffer> buffer(new Buffer( | 38 scoped_ptr<Buffer> buffer(new Buffer( |
| 68 exo_test_helper()->CreateGpuMemoryBuffer(buffer_size), GL_TEXTURE_2D)); | 39 exo_test_helper()->CreateGpuMemoryBuffer(buffer_size), GL_TEXTURE_2D)); |
| 69 scoped_ptr<Surface> surface(new Surface); | 40 scoped_ptr<Surface> surface(new Surface); |
| 70 scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); | 41 scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); |
| 71 | 42 |
| 72 shell_surface->Init(); | |
| 73 shell_surface->SetFullscreen(true); | 43 shell_surface->SetFullscreen(true); |
| 74 surface->Attach(buffer.get()); | 44 surface->Attach(buffer.get()); |
| 75 surface->Commit(); | 45 surface->Commit(); |
| 76 EXPECT_EQ(CurrentContext()->bounds().ToString(), | 46 EXPECT_EQ(CurrentContext()->bounds().ToString(), |
| 77 shell_surface->GetWidget()->GetWindowBoundsInScreen().ToString()); | 47 shell_surface->GetWidget()->GetWindowBoundsInScreen().ToString()); |
| 78 } | 48 } |
| 79 | 49 |
| 80 TEST_F(ShellSurfaceTest, SetTitle) { | 50 TEST_F(ShellSurfaceTest, SetTitle) { |
| 81 scoped_ptr<Surface> surface(new Surface); | 51 scoped_ptr<Surface> surface(new Surface); |
| 82 scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); | 52 scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); |
| 83 | 53 |
| 84 shell_surface->SetTitle(base::string16(base::ASCIIToUTF16("test"))); | 54 shell_surface->SetTitle(base::string16(base::ASCIIToUTF16("test"))); |
| 85 surface->Commit(); | 55 surface->Commit(); |
| 86 } | 56 } |
| 87 | 57 |
| 88 TEST_F(ShellSurfaceTest, SetApplicationId) { | 58 TEST_F(ShellSurfaceTest, SetApplicationId) { |
| 89 scoped_ptr<Surface> surface(new Surface); | 59 scoped_ptr<Surface> surface(new Surface); |
| 90 scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); | 60 scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); |
| 91 | 61 |
| 92 shell_surface->Init(); | |
| 93 surface->Commit(); | 62 surface->Commit(); |
| 94 EXPECT_EQ("", ShellSurface::GetApplicationId( | 63 EXPECT_EQ("", ShellSurface::GetApplicationId( |
| 95 shell_surface->GetWidget()->GetNativeWindow())); | 64 shell_surface->GetWidget()->GetNativeWindow())); |
| 96 shell_surface->SetApplicationId("test"); | 65 shell_surface->SetApplicationId("test"); |
| 97 EXPECT_EQ("test", ShellSurface::GetApplicationId( | 66 EXPECT_EQ("test", ShellSurface::GetApplicationId( |
| 98 shell_surface->GetWidget()->GetNativeWindow())); | 67 shell_surface->GetWidget()->GetNativeWindow())); |
| 99 } | 68 } |
| 100 | 69 |
| 101 void DestroyShellSurface(scoped_ptr<ShellSurface>* shell_surface) { | 70 void DestroyShellSurface(scoped_ptr<ShellSurface>* shell_surface) { |
| 102 shell_surface->reset(); | 71 shell_surface->reset(); |
| 103 } | 72 } |
| 104 | 73 |
| 105 TEST_F(ShellSurfaceTest, Move) { | 74 TEST_F(ShellSurfaceTest, Move) { |
| 106 scoped_ptr<Surface> surface(new Surface); | 75 scoped_ptr<Surface> surface(new Surface); |
| 107 scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); | 76 scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); |
| 108 | 77 |
| 109 // Map shell surface. | 78 // Map shell surface. |
| 110 shell_surface->Init(); | |
| 111 surface->Commit(); | 79 surface->Commit(); |
| 112 | 80 |
| 113 // Post a task that will destroy the shell surface and then start an | 81 // Post a task that will destroy the shell surface and then start an |
| 114 // interactive move. The interactive move should end when surface is | 82 // interactive move. The interactive move should end when surface is |
| 115 // destroyed. | 83 // destroyed. |
| 116 base::MessageLoopForUI::current()->PostTask( | 84 base::MessageLoopForUI::current()->PostTask( |
| 117 FROM_HERE, | 85 FROM_HERE, |
| 118 base::Bind(&DestroyShellSurface, base::Unretained(&shell_surface))); | 86 base::Bind(&DestroyShellSurface, base::Unretained(&shell_surface))); |
| 119 shell_surface->Move(); | 87 shell_surface->Move(); |
| 120 } | 88 } |
| 121 | 89 |
| 122 TEST_F(ShellSurfaceTest, SetGeometry) { | 90 TEST_F(ShellSurfaceTest, SetGeometry) { |
| 123 gfx::Size buffer_size(64, 64); | 91 gfx::Size buffer_size(64, 64); |
| 124 scoped_ptr<Buffer> buffer(new Buffer( | 92 scoped_ptr<Buffer> buffer(new Buffer( |
| 125 exo_test_helper()->CreateGpuMemoryBuffer(buffer_size), GL_TEXTURE_2D)); | 93 exo_test_helper()->CreateGpuMemoryBuffer(buffer_size), GL_TEXTURE_2D)); |
| 126 scoped_ptr<Surface> surface(new Surface); | 94 scoped_ptr<Surface> surface(new Surface); |
| 127 scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); | 95 scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); |
| 128 | 96 |
| 129 shell_surface->Init(); | |
| 130 gfx::Rect geometry(16, 16, 32, 32); | 97 gfx::Rect geometry(16, 16, 32, 32); |
| 131 shell_surface->SetGeometry(geometry); | 98 shell_surface->SetGeometry(geometry); |
| 132 surface->Attach(buffer.get()); | 99 surface->Attach(buffer.get()); |
| 133 surface->Commit(); | 100 surface->Commit(); |
| 134 EXPECT_EQ( | 101 EXPECT_EQ( |
| 135 geometry.size().ToString(), | 102 geometry.size().ToString(), |
| 136 shell_surface->GetWidget()->GetWindowBoundsInScreen().size().ToString()); | 103 shell_surface->GetWidget()->GetWindowBoundsInScreen().size().ToString()); |
| 137 EXPECT_EQ(gfx::Rect(gfx::Point() - geometry.OffsetFromOrigin(), buffer_size) | 104 EXPECT_EQ(gfx::Rect(gfx::Point() - geometry.OffsetFromOrigin(), buffer_size) |
| 138 .ToString(), | 105 .ToString(), |
| 139 surface->bounds().ToString()); | 106 surface->bounds().ToString()); |
| 140 } | 107 } |
| 141 | 108 |
| 142 void Close(int* close_call_count) { | 109 void Close(int* close_call_count) { |
| 143 (*close_call_count)++; | 110 (*close_call_count)++; |
| 144 } | 111 } |
| 145 | 112 |
| 146 TEST_F(ShellSurfaceTest, CloseCallback) { | 113 TEST_F(ShellSurfaceTest, CloseCallback) { |
| 147 scoped_ptr<Surface> surface(new Surface); | 114 scoped_ptr<Surface> surface(new Surface); |
| 148 scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); | 115 scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); |
| 149 | 116 |
| 150 int close_call_count = 0; | 117 int close_call_count = 0; |
| 151 shell_surface->set_close_callback( | 118 shell_surface->set_close_callback( |
| 152 base::Bind(&Close, base::Unretained(&close_call_count))); | 119 base::Bind(&Close, base::Unretained(&close_call_count))); |
| 153 | 120 |
| 154 shell_surface->Init(); | |
| 155 surface->Commit(); | 121 surface->Commit(); |
| 156 | 122 |
| 157 EXPECT_EQ(0, close_call_count); | 123 EXPECT_EQ(0, close_call_count); |
| 158 shell_surface->GetWidget()->Close(); | 124 shell_surface->GetWidget()->Close(); |
| 159 EXPECT_EQ(1, close_call_count); | 125 EXPECT_EQ(1, close_call_count); |
| 160 } | 126 } |
| 161 | 127 |
| 162 TEST_F(ShellSurfaceTest, SurfaceDestroyedCallback) { | 128 TEST_F(ShellSurfaceTest, SurfaceDestroyedCallback) { |
| 163 scoped_ptr<Surface> surface(new Surface); | 129 scoped_ptr<Surface> surface(new Surface); |
| 164 scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); | 130 scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); |
| 165 | 131 |
| 166 shell_surface->set_surface_destroyed_callback( | 132 shell_surface->set_surface_destroyed_callback( |
| 167 base::Bind(&DestroyShellSurface, base::Unretained(&shell_surface))); | 133 base::Bind(&DestroyShellSurface, base::Unretained(&shell_surface))); |
| 168 | 134 |
| 169 shell_surface->Init(); | |
| 170 surface->Commit(); | 135 surface->Commit(); |
| 171 | 136 |
| 172 EXPECT_TRUE(shell_surface.get()); | 137 EXPECT_TRUE(shell_surface.get()); |
| 173 surface.reset(); | 138 surface.reset(); |
| 174 EXPECT_FALSE(shell_surface.get()); | 139 EXPECT_FALSE(shell_surface.get()); |
| 175 } | 140 } |
| 176 | 141 |
| 177 void Configure(gfx::Size* suggested_size, const gfx::Size& size) { | 142 void Configure(gfx::Size* suggested_size, const gfx::Size& size) { |
| 178 *suggested_size = size; | 143 *suggested_size = size; |
| 179 } | 144 } |
| 180 | 145 |
| 181 TEST_F(ShellSurfaceTest, ConfigureCallback) { | 146 TEST_F(ShellSurfaceTest, ConfigureCallback) { |
| 182 scoped_ptr<Surface> surface(new Surface); | 147 scoped_ptr<Surface> surface(new Surface); |
| 183 scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); | 148 scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); |
| 184 | 149 |
| 185 shell_surface->Init(); | |
| 186 | |
| 187 gfx::Size suggested_size; | 150 gfx::Size suggested_size; |
| 188 shell_surface->set_configure_callback( | 151 shell_surface->set_configure_callback( |
| 189 base::Bind(&Configure, base::Unretained(&suggested_size))); | 152 base::Bind(&Configure, base::Unretained(&suggested_size))); |
| 190 shell_surface->Maximize(); | 153 shell_surface->Maximize(); |
| 191 EXPECT_EQ(CurrentContext()->bounds().width(), suggested_size.width()); | 154 EXPECT_EQ(CurrentContext()->bounds().width(), suggested_size.width()); |
| 192 | 155 |
| 193 shell_surface->SetFullscreen(true); | 156 shell_surface->SetFullscreen(true); |
| 194 EXPECT_EQ(CurrentContext()->bounds().size().ToString(), | 157 EXPECT_EQ(CurrentContext()->bounds().size().ToString(), |
| 195 suggested_size.ToString()); | 158 suggested_size.ToString()); |
| 196 } | 159 } |
| 197 | 160 |
| 198 } // namespace | 161 } // namespace |
| 199 } // namespace exo | 162 } // namespace exo |
| OLD | NEW |